用glDrawElements画多次边形,其中的参数,点的index,这个顺序是是不是按为点设置空间位置的顺序确定的呢?我遇到这样的问题:
我想建一个网格
算法是先建立第一排点,再建立第二排点 // create vertices
float x=-size/2.0, z=-size/2.0;
for ( int i = 0; i <=h; i++ )
{
for ( int j = 0; j <=w; j++ )
{
Vertex* ver;
newVertex( ver );
ver->setPosition( x, 0, z );
x += wSize;
}
x=-size/2.0;
z += hSize;
}
.....
如果我建一个2*2的网格,点的序号应该该是
v6 v7 v8
v3 v4 v5
v0 v1 v2如果1*1的
v2 v3
v0 v1
...
可是我在glDrawElements里面按照0,1,3,2的顺序出来的是个扭曲的四方形,用0,1,2,3才是正常的
可是按照点的空间位置建立的顺序,用0,1,2,3建立出来的四方型才是错误的阿?
这里很糊涂,请高手指教。谢谢
我想建一个网格
算法是先建立第一排点,再建立第二排点 // create vertices
float x=-size/2.0, z=-size/2.0;
for ( int i = 0; i <=h; i++ )
{
for ( int j = 0; j <=w; j++ )
{
Vertex* ver;
newVertex( ver );
ver->setPosition( x, 0, z );
x += wSize;
}
x=-size/2.0;
z += hSize;
}
.....
如果我建一个2*2的网格,点的序号应该该是
v6 v7 v8
v3 v4 v5
v0 v1 v2如果1*1的
v2 v3
v0 v1
...
可是我在glDrawElements里面按照0,1,3,2的顺序出来的是个扭曲的四方形,用0,1,2,3才是正常的
可是按照点的空间位置建立的顺序,用0,1,2,3建立出来的四方型才是错误的阿?
这里很糊涂,请高手指教。谢谢
v0 v2 v5
v1 v3 v42 X 1就是
v0 v1
v2 v3
v4 v5n X n的只能多次绘制
我没用n*n只是用1*1的来试验的,也不行
而且我看红皮opengl权威指南中,有个例子是做盒子,他就是一下子输入了六个面的序号阿pause_break:绘制代码是这样的..建立1*1的网格数据
Organ org(1,1);
把数据传入到main.cpp中
static void grid()
{
........//得到点的空间位置和点的顺序
for(int i=0; i<org.numVer(); i++){
int j=i*2;
float x = (float)pos[i]->getX();
float y = (float)pos[i]->getZ();
posArray[j]=x;
posArray[j+1]=y;
}
/*for(int i=0;i<conVerIdSize;i++){
connectArray[i]=connect[i];
}*/
做实验用的序号
static int connectArray[]={0,1,3,2};
glPolygonMode(GL_FRONT,GL_LINE); glEnableClientState( GL_VERTEX_ARRAY);
glVertexPointer( 2, GL_FLOAT, 0,posArray);
在这里画
glDrawElements(GL_QUADS, conVerIdSize,GL_UNSIGNED_INT,connectArray);
glDisableClientState(GL_VERTEX_ARRAY);}
是不是我这个顺序有什么问题呢?还是什么别的原因?
以GL_QUADS可以一次性画下来,看你顶点数组和索引数组是怎么排的,而且你要画在x, z轴上需要指定三个点的,两个点只能画在xy轴上,或者通过模型变换到xz轴上.static float varray[] = {-2.0, -2.0, -1.0, -2.0, 0.0, -2.0, 1.0, -2.0,
-2.0, -1.0, -1.0, -1.0, 0.0, -1.0, 1.0, -1.0,
-2.0, 0.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0};static unsigned int indices[] = {0, 1, 5, 4, 4, 5, 9, 8, 1, 2, 6, 5, 5, 6, 10, 9, 2, 3, 7, 6, 6, 7, 11, 10};
void init()
{
glClearColor(0.0, 0.0, 0.0, 0.0);
glPolygonMode(GL_FRONT, GL_LINE);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(2, GL_FLOAT, 0, varray);
}void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0, 1.0, 0.0);
glDrawElements(GL_QUADS, sizeof(indices) /4, GL_UNSIGNED_INT, indices);
}
这样画就可以