图形编程基础原理。
各位大哥大姐。我最近在研究用c++绘制3d图形的内容。
在此小弟有几个疑问。在不借助任何画图API(DX,Opengl等)情况下,如何将一个3d物体表现在我们的二维屏幕上?
并且对于z轴的位置也不是很清楚应该如何表现。
如果我们要画一个立方体,那么struct Point的数据类型一定是{int x,int y, int z, int w, int r, int g , int b, int a}
假如我写一个简单的立方体,它的顶点为:Vertex v1(0.0f, 0.0f, 0.5f, 1.0f, 0.0f, 0.0f, 0.0f,1.0f);//001
Vertex v2(0.5f, 0.0f, 0.5f, 1.0f, 0.0f, 0.0f, 0.0f,1.0f);//101
Vertex v3(0.0f, 0.5f, 0.5f, 1.0f, 0.0f, 0.0f, 0.0f,1.0f);//011
Vertex v4(0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 0.0f, 0.0f,1.0f);//111
Vertex v5(0.0f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f,1.0f);//010
Vertex v6(0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f,1.0f);//110
Vertex v7(0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f,1.0f);//000
Vertex v8(0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f,1.0f);//100
那么我现在自己写出来的绘图函数只有画线(着色),画三角形(Point a, Point b, Point c),分解多边形为三角形,屏幕裁剪。理论上来讲,我能够用三个点画出三角形即我可以组成任意图形但是仅局限于2d坐标系中。
其实我想说的就是,我怎么将3d的点表示在2d屏幕上?因为不知道z轴该如何表示。
谢谢大伙。
[解决办法]
不用 OpenGL 或 DX 一样画,GL 和 DX 只是硬件加速的接口,绘制速度快而以.然而有的必有失, GL 和 DX 能提供的功能却很有限.自然界中很大一部分光学现象, GL 和 DX 是无法模拟的.实际上 GL 和 DX 倒是只能绘制不太复杂的场景,因为其所实现的简化了的光学模型描述不了更加复杂的光学现象.图形学中复杂渲染基本还是 C++ 直接做的.
[解决办法]
或者你看得懂这有个简单版本。
http://www.rayfile.com/zh-cn/files/06a82a8a-816f-11e1-a942-0015c55db73d/