精华内容
下载资源
问答
  • VC中绘制三维曲线

    2016-03-23 21:58:42
    在visual c++6.0中使用teechart实现三维曲线绘制的示例程序
  • VC中实现OpenGL三维绘图源代码,代码演示了如何在VC中使用OpenGL进行三维绘图
  • VC实现OpenGL三维绘图

    2012-06-28 08:46:42
    VC实现OpenGL三维绘图
  • OpenGL绘制三维图形的实例源代码,源代码比较复杂,它可以绘制3D立体效果图,长方体、正方体等,其功能类似一款简单的3D绘图工具
  • 三维图形可旋转vc2008源代码,围绕坐标轴旋转,上线两个面边框用彩色显示,方便观察
  • OpenGL三维绘图vc绘图源码

    热门讨论 2010-04-30 09:56:14
    OpenGL三维绘图vc绘图源码,我看到别人分拉的很高,免费才是硬道理
  • VC中实现OpenGL三维绘图-实例

    热门讨论 2010-05-18 19:09:07
    VC中实现OpenGL三维绘图-实例,可运行------------------------------
  • VC+OpenGL三维画图代码

    2009-03-16 17:14:17
    本程序包含了基于VC+openGL的工程代码,开发了复杂的三维画图功能,有很高借鉴意义。希望对您有用,请联系 wangruhang@126.com,QQ:21712539
  • VC中实现OpenGL三维绘图 我花钱买来的 很不错的资源哦
  • 以空间螺旋线为例,展示MFC中使用TeeChart绘制三维曲线的程序。包含https://blog.csdn.net/carlos_soler/article/details/78614054#7930033中的源程序
  • 实现三维图形绘制

    2018-06-23 15:32:56
    Visual studio和DirectX的编程接口,学会编写窗口,实现三维图形的绘制等功能。
  • 一个比较粗糙的VC++二维显示和三维显示的关键技术代码,程序在VC6.0下调试通过,显示类的定义部分在eidterView.h 文件中,其实现部分在 eidterView.cpp文件中。它可生成三种数据曲线图以及三维图形展示图像等。 ...

    源码下载简介

    一个比较粗糙的VC++二维显示和三维显示的关键技术代码,程序在VC6.0下调试通过,显示类的定义部分在eidterView.h 文件中,其实现部分在 eidterView.cpp文件中。它可生成三种数据曲线图以及三维图形展示图像等。

    源码下载地址:点击下载

    备用下载地址:点击下载

    展开全文
  • 在VC++6.0中使用OpenGL绘制三维图形的实例源代码,源代码比较复杂,它可以绘制3D立体效果图,长方体、正方体等,其功能类似一款简单的3D绘图工具,还有其它功能,你可以下载编译一下探个究竟! 源码下载地址:点击...

    源码下载简介

    在VC++6.0中使用OpenGL绘制三维图形的实例源代码,源代码比较复杂,它可以绘制3D立体效果图,长方体、正方体等,其功能类似一款简单的3D绘图工具,还有其它功能,你可以下载编译一下探个究竟!

    源码下载地址:点击下载

    备用下载地址:点击下载

    展开全文
  • OpenGL三维绘图

    2013-10-09 23:23:40
    VC中实现OpenGL三维绘图,MFC中使用opengl。
  • 基于VC6.0和OpenGL进行三维图形图像开发!
  • 利用OpenGL实现三维绘图 1 初始化OpenGL绘图环境 2 定义与Windows接口的系统函数 3 在VC下实现程序编译
  • Visual C++6.0画三维立体图形

    千次阅读 2019-07-22 16:33:19
    在画三维立体图之前,主要是先要找到二维和三维的对应关系,这是转化的关键。 关键代码如下: S[i].x=P[i][1]+sqrt(2)/3.0*(-P[i][0]); S[i].y=P[i][2]+sqrt(2)/3.0*(-P[i][0]); 一、建立边表结构,在同一屏幕...

    在画三维立体图之前,主要是先要找到二维和三维的对应关系,这是转化的关键。
    关键代码如下:

    			S[i].x=P[i][1]+sqrt(2)/3.0*(-P[i][0]);
    			S[i].y=P[i][2]+sqrt(2)/3.0*(-P[i][0]);
    

    一、建立边表结构,在同一屏幕上完成三视图和正等轴测投影图

    //消隐之前
    //编译环境:Visual C++ 6.0,EasyX_20190219(beta)
    #include<graphics.h>
    #include<conio.h>
    #include<math.h>
    #define max 50
    #include<iostream>
    #include<math.h>
    using namespace std;
    
    #define pi 3.14159
    using namespace std;
    double ja=35.3;//54.7
    double rad=(double)ja*pi/(double)180.0;
    double Dpoint[][4]={
    	{0,0,84,1},{110,0,84,1},{110,0,20,1},{140,0,20,1},
    	{140,0,0,1},{140,80,0,1},{0,80,0,1},{0,80,54,1},
    	{0,60,54,1},{0,60,84,1},{20,60,84,1},{20,20,84,1},
    	{110,20,84,1},{110,20,20,1},{60,20,20,1},{60,80,20,1},
    	{40,80,54,1},{40,60,54,1},{140,80,20,1},{0,0,0,1}
    };
    
    //下标从0开始
    int ring[]={
    	0,1,12,11,10,9,//0-5
    	2,3,18,15,14,13,//6-11
    	8,17,16,17,//12-15
    	1,2,13,12,//16-19
    	3,4,5,18,//20-23
    	11,14,15,16,17,10,//24-29
    	11,12,13,14,//30-33
    	15,18,5,6,7,16,//34-39
    	9,10,17,8,//40-43
    	0,9,8,7,6,19,//44-49
    	0,19,4,3,2,1,//50-55
    	4,19,6,5//56-59
    };
    //构成面的顶点
    int surface[12][2]={
    	{0,5},{6,11},{12,15},{16,19},{20,23},{24,29},
    	{30,33},{34,39},{40,43},{44,49},{50,55},{56,59}
    };
    //主视图
    int XOZ_ring[]={
    	1,2,14,10,
    	0,7,16,10,
    	3,15,17,7,6,4
    };
    int XOZ_surface[3][2]={
    	{0,3},{4,7},{8,13}
    };
    //侧视图
    int YOZ_ring[]={
    	0,2,13,12,
    	11,10,8,7,15,13,
    	3,4,5,15
    };
    int YOZ_surface[3][2]={
    	{0,3},{4,9},{10,13}
    };
    //俯视图
    int XOY_ring[]={
    	2,0,9,10,11,12,
    	3,5,15,14,12,2,
    	14,15,16,17,10,11,
    	16,7,9,17
    };
    int XOY_surface[4][2]={
    	{0,5},{6,11},{12,17},{18,21}
    };
    
    //正等轴投影
    int XYZ_ring[]={
    	3,4,5,18,
    	5,6,7,16,15,18,
    	2,3,18,15,14,13,
    	1,2,13,12,
    	11,12,13,14,
    	10,11,14,15,16,17,
    	7,8,17,16,
    	8,9,10,17,
    	0,1,12,11,10,9
    };
    int XYZ_surface[9][2]={
    	{0,3},{4,9},{10,15},{16,19},{20,23},{24,29},{30,33},{34,37},{38,43}
    };
    
    //三维坐标转换为右手坐标系的二维坐标
    void transfer(double P[max][4], int n, POINT S[])
    {
    	int i,j;
    	for(i=0;i<n;i++)
    	{
    		for(j=0;j<3;j++)
    		{
    			S[i].x=P[i][1]+sqrt(2)/3.0*(-P[i][0]);
    			S[i].y=P[i][2]+sqrt(2)/3.0*(-P[i][0]);
    		}		
    	}
    }
    //主视图:XOZ面的投影变换,将Z的值给二维坐标的y
    void XOZ_Projection(double P[max][4], int n, POINT S[])
    {
    	double T[max][4];//新生成的投影面上的点
    	int i,j,k;
    	int TV[4][4]={ {1,0,0,0},{0,0,0,0},{0,0,1,0},{0,0,0,1} };
    	for(i=0;i<n;i++)
    	{		
    		for(j=0;j<4;j++)
    		{   T[i][j]=0;
    			for(k=0;k<4;k++)
    			{T[i][j]+=P[i][k]*TV[k][j];}
    		} 
    	}
    	for(i=0;i<n;i++)
    	{
    		S[i].x=T[i][0];
    		S[i].y=T[i][2];
    	}
    }
    
    //侧视图:YOZ面的投影变换,将y的值给二维坐标的x, z的值给二维坐标的y
    void YOZ_Projection(double P[max][4], int n, POINT S[])
    {
    	double T[max][4];//新生成的投影面上的点
    	int i,j,k;
    	int TW[4][4]={ {0,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1} };
    	for(i=0;i<n;i++)
    	{		
    		for(j=0;j<4;j++)
    		{   T[i][j]=0;
    			for(k=0;k<4;k++)
    			{T[i][j]+=P[i][k]*TW[k][j];}
    		}
    	}
    	for(i=0;i<n;i++)
    	{
    		S[i].x=T[i][1];
    		S[i].y=T[i][2];
    	}
    }
    
    //俯视图:XOY面的投影变换,将y的值给二维坐标的y, x的值给二维坐标的x
    void XOY_Projection(double P[max][4], int n, POINT S[])
    {
    	double T[max][4];//新生成的投影面上的点
    	int i,j,k;
    	int TH[4][4]={ {1,0,0,0},{0,1,0,0},{0,0,0,0},{0,0,0,1} };
    	for(i=0;i<n;i++)
    	{		
    		for(j=0;j<4;j++)
    		{   T[i][j]=0;
    			for(k=0;k<4;k++)
    			{T[i][j]+=P[i][k]*TH[k][j];}
    		}
    	}
    	for(i=0;i<n;i++)
    	{
    		S[i].x=T[i][0];
    		S[i].y=T[i][1];
    	}
    }
    
    //正等轴投影图:绕Z轴正向旋转α角 ,再绕X轴反向旋转β角,将三维形体向XOZ平面作正投影得到正轴测投影的投影变换矩阵 
    //三维形体向XOZ平面作正投影,将Z的值给二维坐标的y
    void XYZ_Projection(double P[max][4], int n, POINT S[])
    {
    	double T[max][4];//新生成的投影面上的点
    	int i,j,k;
    	double TT[4][4]={
    		{cos(rad),0,-sin(rad)*sin(rad),0},
    		{-sin(rad),0,-cos(rad)*sin(rad),0},
    		{0,0,cos(rad),0},
    		{0,0,0,1}
    	};
    	for(i=0;i<n;i++)
    	{	
    		for(j=0;j<4;j++)
    		{   T[i][j]=0;
    			for(k=0;k<4;k++)
    			{T[i][j]+=P[i][k]*TT[k][j];}
    		}
    	}
    	for(i=0;i<n;i++)
    	{
    		S[i].x=T[i][0];
    		S[i].y=T[i][2];
    	}
    }
    
    
    int main()
    {
    	initgraph(800,550);
    	setorigin(220,350);
    	setaspectratio(1,-1);
    	
    	line(0,0,180,0);
    	line(0,0,0,120);
    	line(0,0,-95,-95);
    	int i,j,index,k;
    	POINT points[20];
    	POINT points1[10];
    	setcolor(RED);
    	transfer(Dpoint,20,points);
    //画三维立体图
    for(i=0;i<12;i++){
        k=0;
    	for(j=surface[i][0];j<=surface[i][1];j++)
    	{
    		index=ring[j];
    		points1[k].x=points[index].x;
    		points1[k].y=points[index].y;
    		k++;
    	}
    	polygon(points1,k);
    }
    setcolor(YELLOW);
    //画主视图
    XOZ_Projection(Dpoint,20,points);	
    for(i=0;i<3;i++){//3个面
        k=0;
    	for(j=XOZ_surface[i][0];j<=XOZ_surface[i][1];j++)
    	{
    		index=XOZ_ring[j];
    		points1[k].x=-points[index].x;
    		points1[k].y=points[index].y+230;
    		k++;
    	}
    	polygon(points1,k);
    }
    
    //侧视图
    YOZ_Projection(Dpoint,20,points);	
    for(i=0;i<3;i++){//3个面
        k=0;
    	for(j=YOZ_surface[i][0];j<=YOZ_surface[i][1];j++)
    	{
    		index=YOZ_ring[j];
    		points1[k].x=points[index].x+20;
    		points1[k].y=points[index].y+230;
    		k++;
    	}
    	polygon(points1,k);
    }
    
    //俯视图
    XOY_Projection(Dpoint,20,points);	
    for(i=0;i<4;i++){//4个面
        k=0;
    	for(j=XOY_surface[i][0];j<=XOY_surface[i][1];j++)
    	{
    		index=XOY_ring[j];
    		points1[k].x=-points[index].x;
    		points1[k].y=-points[index].y+210;
    		k++;
    	}
    	polygon(points1,k);
    }
    //正等轴投影图
    XYZ_Projection(Dpoint,20,points);	
    for(i=0;i<12;i++){
        k=0;
    	for(j=surface[i][0];j<=surface[i][1];j++)
    	{
    		index=ring[j];
    		points1[k].x=-points[index].x+250;
    		points1[k].y=-(-points[index].y+100)+200;
    		k++;
    	}
    	polygon(points1,k);
    }
    	_getch();
    	closegraph();
    	return 0;
    }
    
    

    效果演示:
    在这里插入图片描述
    二、给定点的三维坐标值,建立面表、环表、顶点表三表结构,画出三维物体的消隐图

    //消隐之后 
    //编译环境:Visual C++ 6.0,EasyX_20190219(beta)
    #include<graphics.h>
    #include<conio.h>
    #include<math.h>
    #define max 50
    #include<iostream>
    #include<math.h>
    using namespace std;
    #define pi 3.14159
    using namespace std;
    double ja=35.3;//54.7
    double rad=(double)ja*pi/(double)180.0;
    double Dpoint[][4]={
    	{0,0,84,1},{110,0,84,1},{110,0,20,1},{140,0,20,1},
    	{140,0,0,1},{140,80,0,1},{0,80,0,1},{0,80,54,1},
    	{0,60,54,1},{0,60,84,1},{20,60,84,1},{20,20,84,1},
    	{110,20,84,1},{110,20,20,1},{60,20,20,1},{60,80,20,1},
    	{40,80,54,1},{40,60,54,1},{140,80,20,1},{0,0,0,1}
    };
    
    //下标从0开始
    int ring[]={
    	0,1,12,11,10,9,//0-5
    	2,3,18,15,14,13,//6-11
    	8,17,16,17,//12-15
    	1,2,13,12,//16-19
    	3,4,5,18,//20-23
    	11,14,15,16,17,10,//24-29
    	11,12,13,14,//30-33
    	15,18,5,6,7,16,//34-39
    	9,10,17,8,//40-43
    	0,9,8,7,6,19,//44-49
    	0,19,4,3,2,1,//50-55
    	4,19,6,5//56-59
    };
    //构成面的顶点
    int surface[12][2]={
    	{0,5},{6,11},{12,15},{16,19},{20,23},{24,29},
    	{30,33},{34,39},{40,43},{44,49},{50,55},{56,59}
    };
    
    //消影
    int ring1[]={
    	3,4,5,18,
    	5,6,7,16,15,18,
    	2,3,18,15,14,13,
    	1,2,13,12,
    	11,12,13,14,
    	10,11,14,15,16,17,
    	7,8,17,16,
    	8,9,10,17,
    	0,1,12,11,10,9
    };
    int surface1[9][2]={
    	{0,3},{4,9},{10,15},{16,19},{20,23},{24,29},{30,33},{34,37},{38,43}
    };
    
    //三维坐标转换为右手坐标系的二维坐标
    void transfer(double P[max][4], int n, POINT S[]){
    	int i,j;
    	for(i=0;i<n;i++){
    		for(j=0;j<3;j++){
    			S[i].x=P[i][1]+sqrt(2)/3.0*(-P[i][0]);
    			S[i].y=P[i][2]+sqrt(2)/3.0*(-P[i][0]);
    		}		
    	}
    }
    
    //正等轴投影图
    void XYZ_Projection(double P[max][4], int n, POINT S[]){
    	double T[max][4];//新生成的投影面上的点
    	int i,j,k;
    	double TT[4][4]={
    		{cos(rad),0,-sin(rad)*sin(rad),0},
    		{-sin(rad),0,-cos(rad)*sin(rad),0},
    		{0,0,cos(rad),0},
    		{0,0,0,1}
    	};
    	for(i=0;i<n;i++){	
    		for(j=0;j<4;j++){   
    			T[i][j]=0;
    			for(k=0;k<4;k++)
    			{T[i][j]+=P[i][k]*TT[k][j];}
    		}
    	}
    	for(i=0;i<n;i++){
    		S[i].x=T[i][0];
    		S[i].y=T[i][2];
    	}
    }
    
    int main()
    {
    	initgraph(800,550);
    	setorigin(220,350);
    	setaspectratio(1,-1);
    	line(0,0,180,0);
    	line(0,0,0,120);
    	line(0,0,-95,-95);
    
    	int i,j,index,k;
    	POINT points[20];
    	POINT points1[10];
    	setcolor(RED);
    	transfer(Dpoint,20,points);
    //未消影之前的三维立体图
    for(i=0;i<12;i++){
        k=0;
    	for(j=surface[i][0];j<=surface[i][1];j++){
    		index=ring[j];
    		points1[k].x=points[index].x;
    		points1[k].y=points[index].y;
    		k++;
    	}
    	polygon(points1,k);
    }
    //画三维立体消影图
    setcolor(YELLOW);
    for(i=0;i<9;i++){
        k=0;
    	for(j=surface1[i][0];j<=surface1[i][1];j++){
    		index=ring1[j];
    		points1[k].x=points[index].x+250;
    		points1[k].y=points[index].y;
    		k++;
    	}
    	polygon(points1,k);
    }
    setcolor(BLUE);
    //正等轴投影图
    XYZ_Projection(Dpoint,20,points);	
    for(i=0;i<9;i++){
        k=0;
    	for(j=surface1[i][0];j<=surface1[i][1];j++){
    		index=ring1[j];
    		points1[k].x=-points[index].x+200;
    		points1[k].y=-(-points[index].y+100)+300;
    		k++;
    	}
    	polygon(points1,k);
    }
    	_getch();
    	closegraph();
    	return 0;
    }
    
    

    效果演示:
    在这里插入图片描述
    红色为原图,黄色为消影之后的三维立体图,蓝色为消影后的正等轴侧投影图。

    展开全文
  • VC MFC MVC球体绘图程序源码,多任务模式的VC 绘图程序实例,在以往的模式中,大家一般都采用 Input-Processing-Output 的单任务模式,但是现在在Windows的编程中,MVC模型更适合图形界面的设计,它将数据处理和数据...
  • OpenGL三维绘图实例 vc6.0 源码
  • 其实想想, Win32中既然存在画线画点函数, 利用计算机图形学的知识, 我们用可以用纯C调用Win32实现三维绘图, 完全不用借助OpenGL和DirectX, 这有重复造轮子的嫌疑, 但是自己动手实现一遍, 毕竟也是有意义的. ...

    ---- 引言----

    每次使用OpenGL或DirectX写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其实想想, Win32中既然存在画线画点函数, 利用计算机图形学的知识, 我们用可以用纯C调用Win32实现三维绘图, 完全不用借助OpenGL和DirectX, 这有重复造轮子的嫌疑, 但是自己动手实现一遍, 毕竟也是有意义的.

    [效果演示]

    线框效果, 隐藏面采用虚线

           

    颜色填充后效果

           

     

    [透视投影理论]   

    分析:假定投影中心在Z轴上(z=-d处),投影面在xoy面上,与z轴垂直,d为投影面与=投影中心的距离。现求空间一点p(x, y, z)的透视投影p'(x', y', z')点的坐标。 

                        


        根据相似三角形对应边成比例关系有:

                          

        写成矩阵形式如下:

         

       


        透视缩小效应:物体的透视投影的大小与物体到投影中心的Z方向距离成反比。

               
        特点:透视投影的深度感更强,更加具有真实感,但透视投影不能够准确反映物体的大小和形状。
        (1)透视投影的大小与物体到投影中心的距离有关。
        (2)一组平行线若平行于投影平面时,它们的透视投影仍然保持平行。
        (3)只有当物体表面平行于投影平面时,该表面上的角度在透视投影中才能被保持。

        灭点:透视投影中不平行于投影面的平行线的投影会汇聚到一个点,这个点称为灭点(Vanishing Point)。
        坐标轴方向的平行线在投影面上形成的灭点称作主灭点。 透视投影可以按照主灭点的个数分类:
        (1)一点透视有一个主灭点,即投影面与一个坐标轴正交,与另外两个坐标轴平行。
        (2)二点透视有两个主灭点,即投影面与两个坐标轴相交,与另一个坐标轴平行。
        (2)三点透视有三个主灭点,即投影面与三个坐标轴都相交。

           

    [编程实现要点]

    计算三维投影点的函数

    void Calc3DPoint(void)
    {
        x  = (-1)*x;
        xa = cr1*x - sr1*z;
        za = sr1*x + cr1*z;
        
        x  = cr2*xa + sr2*y;
        ya = cr2*y  - sr2*xa;
        
        z  = cr3*za - sr3*ya;
        y  = sr3*za + cr3*ya;
        
        x=x+mx; y=y+my; z=z+mz;
        
        sx = d*x/z;
        sy = d*y/z;
        return;    
    }
    

    逐个画出各个侧面, 并进行消隐形探测

    ...
    surface0:
        x1=B1[7][0]; y01=B1[7][1]; z1=B1[7][2];
        x2=B1[0][0];  y2=B1[0][1]; z2=B1[0][2];
        x3=B1[3][0];  y3=B1[3][1]; z3=B1[3][2];    
        VisibilityTest();
        
        if(sp>0) goto surface1;
        
        sx1=B2[7][0]; sy1=B2[7][1];
        sx2=B2[0][0]; sy2=B2[0][1];
        sx3=B2[3][0]; sy3=B2[3][1];
        sx4=B2[6][0]; sy4=B2[6][1];
        sx5=B3[0][0]; sy5=B3[0][1];
        DrawPoly();
    
    surface1:
        x1=B1[6][0]; y01=B1[6][1]; z1=B1[6][2];
        x2=B1[5][0];  y2=B1[5][1]; z2=B1[5][2];
        x3=B1[4][0];  y3=B1[4][1]; z3=B1[4][2];    
        VisibilityTest();
    
        if(sp>0) goto surface2;
        
        sx1=B2[6][0]; sy1=B2[6][1];
        sx2=B2[5][0]; sy2=B2[5][1];
        sx3=B2[4][0]; sy3=B2[4][1];
        sx4=B2[7][0]; sy4=B2[7][1];
        sx5=B3[1][0]; sy5=B3[1][1];
        DrawPoly();
    ....

     

    展开全文
  • 基于cesium的三维管线系统综述

    千次阅读 2021-02-17 00:22:27
    (1)cesium是个javascript库,地图数据通过cesium可以在浏览器中直接浏览,也就是它是一个网络三维地图引擎; (2)web服务器使用Tomcat,有了cesium,建立一个三维地理信息服务的成本显著下降。 Cesium三维场景...
  • vc编程画图用插件

    2012-11-07 15:34:47
    vc编程画图用插件,vc编写程序时画曲线比较困难,有了此插件,可直接调用画图函数,方便快捷,实用
  • VC中实现OpenGL三维绘图 .zip
  • VC2005下利用OpenGL实现三维绘图

    千次阅读 2007-11-12 15:06:00
    三维绘图蓬勃发展的过程中,计算机公司推出了大量的三维绘图软件包。其中SGI公司推出的OpenGL,作为一个性能优越的图形应用程序设计界面(API)异军突起,取得了很大的成就。它以高性能的交互式三维图形建模能力和...
  • 本3d模型在多方面查找出最合适的可用的程序改编而来,里面的3d模型是C#语言纯代码编写建立,无需任何模型插件,里面运行3旋转矩阵对模型的空间位置坐标进行变换实现3旋转,算法适用于任何语言,代码注释清晰,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,194
精华内容 877
关键字:

vc三维绘图