首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >opengl3中的立方体纹理

opengl3中的立方体纹理
EN

Stack Overflow用户
提问于 2012-12-17 05:58:06
回答 1查看 169关注 0票数 0

只是做我的计算机图形作业-把纹理(600x400不同数字的位图)放在一个立方体上形成一个合适的骰子。我设法使用“经典”纹理映射:创建顶点并为其添加相应的纹理坐标:

代码语言:javascript
复制
int arrayindex = 0;
float xpos = 0.0f;
float xposEnd = 0.32f;
float ypos = 0.0f;
float yposEnd = 0.49f;
int count = 0;
void quad( int a, int b, int c, int d ) {
    colors[arrayindex] = vertex_colors[a];
    points[arrayindex] = vertices[a];
    tex_coord[arrayindex] = new Point2(xpos, ypos);
    arrayindex++;
    colors[arrayindex] = vertex_colors[b];
    points[arrayindex] = vertices[b];
    tex_coord[arrayindex] = new Point2(xpos, yposEnd);
    arrayindex++;
    colors[arrayindex] = vertex_colors[c];
    points[arrayindex] = vertices[c];
    tex_coord[arrayindex] = new Point2(xposEnd, yposEnd);
    arrayindex++;
    colors[arrayindex] = vertex_colors[a];
    points[arrayindex] = vertices[a];
    tex_coord[arrayindex] = new Point2(xpos, ypos);
    arrayindex++;
    colors[arrayindex] = vertex_colors[c];
    points[arrayindex] = vertices[c];
    tex_coord[arrayindex] = new Point2(xposEnd, yposEnd);
    arrayindex++;
    colors[arrayindex] = vertex_colors[d];
    points[arrayindex] = vertices[d]; 
    tex_coord[arrayindex] = new Point2(xposEnd, ypos);
    arrayindex++;
    xpos = xpos + 0.34f;
    xposEnd = xpos + 0.32f;
    count++;
    if (count == 3) {
        xpos = 0.0f;
        xposEnd = 0.33f;
        ypos = 0.51f;
        yposEnd = 1.0f;
    }
}

void colorcube() {
    quad( 1, 0, 3, 2 );
    quad( 2, 3, 7, 6 );
    quad( 3, 0, 4, 7 );
    quad( 6, 5, 1, 2 );
    quad( 5, 4, 0, 1 );
    quad( 4, 5, 6, 7 );

    pointsBuf = VectorMath.toBuffer(points);
    colorsBuf = VectorMath.toBuffer(colors);
    texcoord = VectorMath.toBuffer(tex_coord);
}

将所有这些内容传递给着色器,然后将它们放在一起。

但回顾幻灯片,我注意到这种方法应该是"pre opengl3“。有没有其他方法可以做到这一点呢?

在演讲示例中,我注意到将它放在顶点着色器中,但它只适用于简单的2d平面,而不是3d立方体

代码语言:javascript
复制
tex_coords = vec2(vPosition.x+0.5,vPosition.z+0.5);

然后传递给片段着色器以创建纹理。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-17 06:11:18

但是回顾幻灯片,我注意到这种方法应该是“

opengl3”。

我认为您的幻灯片引用了旧的即时模式。在即时模式下,通过调用立即绘制顶点的函数将每个顶点及其属性发送到OpenGL。

然而,在您的代码中,您正在使用顶点数据初始化一个缓冲区。然后,该缓冲区可以作为一个整体传递给OpenGL,并仅通过一个OpenGL调用作为批处理进行绘制。我写“可能”是因为你的问题中没有一个OpenGL调用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13905862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档