Osc*_*ley 1 opengl glut vertex
我真的很喜欢opengl,现在我正在学习基础知识.我有一个高级别的问题.如果我想创建一个对象,请说一个列是所有选项?
我的问题是:
A)还有其他方法吗?
B)如果你不使用3DStudio网格,在opengl中创建普通对象/动画对象的正确方法是什么?
C)在2)中创建列是否正确?(如果是的话,我将尝试使用x,y,z变量对其进行参数化,以获得给定高度的给定地砖的列)
//Column
//Wall
glBegin(GL_POLYGON);
glVertex3f(150.0f, 250.0f,50); // x1, y1 - top-left corner
glVertex3f(50.0f, 250.0f,50); // x2, y1 - top-right corner
glVertex3f(50.0f, 50.0f,50); // x2, y2 - bottom-right corner
glVertex3f(150.0f, 50.0f,50); // x1, y2 - bottom-left corner
glEnd( );
//Wall
glBegin(GL_POLYGON);
glVertex3f(50.0f, 250.0f,0); // x1, y1 - top-left corner
glVertex3f(150.0f, 250.0f,0); // x2, y1 - top-right corner
glVertex3f(150.0f, 50.0f,0); // x2, y2 - bottom-right corner
glVertex3f(50.0f, 50.0f,0); // x1, y2 - bottom-left corner
glEnd( );
//Wall
glBegin(GL_POLYGON);
glVertex3f(150.0f, 250.0f,0); // x1, y1 - top-left corner
glVertex3f(150.0f, 250.0f,50.0f); // x2, y1 - top-right corner
glVertex3f(150.0f, 50.0f,50.0f); // x2, y2 - bottom-right corner
glVertex3f(150.0f, 50.0f,0); // x1, y2 - bottom-left corner
glEnd( );
//Wall
glBegin(GL_POLYGON);
glVertex3f(50.0f, 250.0f,50); // x1, y1 - top-left corner
glVertex3f(50.0f, 250.0f,0); // x2, y1 - top-right corner
glVertex3f(50.0f, 50.0f,0); // x2, y2 - bottom-right corner
glVertex3f(50.0f, 50.0f,50); // x1, y2 - bottom-left corner
glEnd( );
//Floor
glBegin(GL_POLYGON);
glVertex3f(50.0f, 50.0f, 0); // x1, y1 - top-left corner
glVertex3f(50.0f, 50.0f, 50); // x2, y1 - top-right corner
glVertex3f(0, 50.0f, 50); // x2, y2 - bottom-right corner
glVertex3f(0, 50.0f, 0); // x1, y2 - bottom-left corner
glEnd( );
//Ceiling
glBegin(GL_POLYGON);
glVertex3f(50.0f, 250.0f, 0); // x1, y1 - top-left corner
glVertex3f(50.0f, 250.0f, 50); // x2, y1 - top-right corner
glVertex3f(0, 250.0f, 50); // x2, y2 - bottom-right corner
glVertex3f(0, 250.0f, 0); // x1, y2 - bottom-left corner
glEnd( );
Run Code Online (Sandbox Code Playgroud)
这取决于你对正确的定义.逐一回答:
Re:glVertex3f和glBegin/glEnd调用.目前,当你学习时,它们很好,这是一种让你研究渲染管道其他部分的简单方法.但是,它们已经被弃用并且不是最理想的,因此不是您想要永久约束的东西.因此,它们不会在OpenGL ES或WebGL中复制.
CPU和GPU之间的任何通信都会产生相关成本.您在通信中传输的数据越多,成本就越高.但是,由于两个异步和并行设备之间需要临时同步,即使很小的呼叫也要花费很多.
因此glBegin/glVertex3f/glEnd是错误的,因为所有数据都位于CPU上并通过大量调用逐个传输到驱动程序.作为第一步,您可能希望切换到使用glVertexPointer(一步提供所有顶点数据)和glDrawArrays或glDrawElements(一步执行相当于所有glBegin/glEnd调用).从那里,您可以通过顶点数组对象将数据存储在GPU而不是CPU上.