gpt4 book ai didi

c - OpenGL,如何为金字塔的侧面提供纯色

转载 作者:行者123 更新时间:2023-11-30 15:12:13 26 4
gpt4 key购买 nike

现在我正在学习OpenGL,我想画一个金字塔,每面都有不同的颜色。我遇到的问题是我似乎只能为顶点指定颜色,而不能为侧面指定颜色。因此每一面都有渐变效果而不是纯色。我怎样才能给我的侧面纯色?

    void init_buffer()
{
glGenBuffers(1, &(b.trifan));
glBindBuffer(GL_ARRAY_BUFFER, b.trifan);

GLfloat trifan[6][3] =
{
{0.0, 1.0, 0.0},
{1.0, 0.0, 1.0},
{-1.0, 0.0, 1.0},
{-1.0, 0.0, -1.0},
{1.0, 0.0, -1.0},
{1.0, 0.0, 1.0}
};

glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * 3 * 6, trifan, GL_STATIC_COPY);


//base of the pyramid as 2 triangles
glGenBuffers(1, &(b.tribase));
glBindBuffer(GL_ARRAY_BUFFER, b.tribase);
GLfloat tribase[4][3] =
{
{1.0, 0.0, -1.0},
{-1.0, 0.0, -1.0},
{1.0, 0.0, 1.0},
{-1.0, 0.0, 1.0}
};
glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * 4 * 3, tribase, GL_STATIC_COPY);

//colors
glGenBuffers(1, &b.colors);
glBindBuffer(GL_ARRAY_BUFFER, b.colors);
GLfloat colors[6][3] =
{
{1.0, 0.0, 0.0},
{1.0, 0.0, 0.0},
{1.0, 0.0, 0.0},
{1.0, 0.0, 1.0},
{0.5, 0.0, 1.0},
{1.0, 0.0, 0.5},
};
glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * 3 * 6, colors, GL_STATIC_COPY);

check_errors();
}


...
//Inside my display function
glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_VERTEX_ARRAY);
{
glBindBuffer(GL_ARRAY_BUFFER, b.trifan);
glVertexPointer(3, GL_FLOAT, 0, 0);

glBindBuffer(GL_ARRAY_BUFFER, b.colors);
glColorPointer(3, GL_FLOAT, 0, 0);

glDrawArrays(GL_TRIANGLE_FAN, 0, 6);

glBindBuffer(GL_ARRAY_BUFFER, b.tribase);
glVertexPointer(3, GL_FLOAT, 0, 0);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
}
glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);

最佳答案

您可以按照评论中的建议复制每个面的顶点。通过为每个面使用不同的纹理(位图)也可以实现相同的效果,而无需复制顶点。

引用

http://oglsuperbible5.googlecode.com/svn/trunk/Src/Chapter05/Pyramid/Pyramid.cpp

https://www.scss.tcd.ie/Michael.Manzke/CS7055/Lab2/SuperBible.4th.Ed.Ch8-9.pdf

注意: super 引用仅在所有面上映射了一个纹理,因此需要编写额外的代码来将不同的纹理映射到不同的面上。

关于c - OpenGL,如何为金字塔的侧面提供纯色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35155139/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com