OpenGL 不显示中间色
OpenGL not showing intermediate colors
我正在使用OpenGL导入.obj和.stl文件,并尝试为每张脸着色。作为我可以为对象着色的概念证明,我按照导入的顺序为每个顶点分配了一个整数(1 表示第一个顶点,2 表示第二个顶点,3 表示第三个顶点,依此类推)。接下来,我创建了一个函数,将顶点的索引映射到 RGB 值。当我画所有的面孔时,这些面只有几种不同的颜色 - 并且没有颜色过渡。换句话说,我看到的颜色并没有平滑过渡 - 相反,有一些定义的颜色,中间有相当定义的线条。这让我有一种预感,OpenGL 可能不会按照我想要的方式显示颜色,所以我在我的 createVertexArray
方法中将所有面的所有顶点设置为橙色 - 初始化glBufferData
。输出显示模型为黄色而不是橙色。可能是什么原因造成的?
RGB 255,162,0 为橙色
创建顶点数组:
void createVertexArray(std::vector<triangle> & facet, std::map<vec3d, GLfloat> & vecMagMap, float* vertices, std::vector<GLfloat> mags, GLfloat j_min, GLfloat j_max)
{
const int NUM_FACETS = facet.size();
std::cout << "nNUMFACETS: " << NUM_FACETS << "n";
int count = 0;
hsv temp;
rgb tempRGB;
int tempH = 0;
for (int facet_index = 0; facet_index < NUM_FACETS; facet_index++){
tempRGB = getColor(vecMagMap[facet[facet_index].point[0]], 0, vecMagMap.size());
temp = rgb2hsv(tempRGB);
//if (tempH != temp.h){ std::cout << tempH << "n"; tempH = temp.h; }
vertices[count + 0] = facet[facet_index].point[0].x;
vertices[count + 1] = facet[facet_index].point[0].y;
vertices[count + 2] = facet[facet_index].point[0].z;
vertices[count + 3] = facet[facet_index].normal.x;
vertices[count + 4] = facet[facet_index].normal.y;
vertices[count + 5] = facet[facet_index].normal.z;
vertices[count + 6] = 255;
vertices[count + 7] = 162;
vertices[count + 8] = 0;
vertices[count + 9] = 1.0;
vertices[count + 10] = facet[facet_index].point[1].x;
vertices[count + 11] = facet[facet_index].point[1].y;
vertices[count + 12] = facet[facet_index].point[1].z;
vertices[count + 13] = facet[facet_index].normal.x;
vertices[count + 14] = facet[facet_index].normal.y;
vertices[count + 15] = facet[facet_index].normal.z;
vertices[count + 16] = 255;
vertices[count + 17] = 162;
vertices[count + 18] = 0;
vertices[count + 19] = 1.0;
vertices[count + 20] = facet[facet_index].point[2].x;
vertices[count + 21] = facet[facet_index].point[2].y;
vertices[count + 22] = facet[facet_index].point[2].z;
vertices[count + 23] = facet[facet_index].normal.x;
vertices[count + 24] = facet[facet_index].normal.y;
vertices[count + 25] = facet[facet_index].normal.z;
vertices[count + 26] = 255;
vertices[count + 27] = 162;
vertices[count + 28] = 0;
vertices[count + 29] = 1.0;
count += 30;
}
}
我画画的主要部分:
glGenBuffers(1, &bufferID);
glBindBuffer(GL_ARRAY_BUFFER, bufferID);
glBufferData(GL_ARRAY_BUFFER,facet.size()*30*sizeof(GLfloat),vertices,GL_STATIC_DRAW);
glPolygonMode(GL_FRONT, // options: GL_FRONT, GL_BACK, GL_FRONT_AND_BACK
GL_FILL); // options: GL_POINT, GL_LINE, GL_FILL (default)
glShadeModel(GL_SMOOTH); // shading model
scale = 5.0*scale_0; // initial scale
delta = 0.010*scale_0; // change in scale
int frame = 0;
while(running){
drawGeometry(argv, window, scale, frame,vertices, 3*facet.size(),move_x, move_y, move_z,rotate_x, rotate_y, rotate_z);// render objects in the window
if(!pause){rotate_x += drot_x;rotate_y += drot_y;rotate_z += drot_z;}
glfwSwapBuffers(window);// swap front and back buffers
glfwPollEvents();// poll for and processs events
}
OpenGL 可能在绘制浮点颜色值之前将这些浮点颜色值压缩到 [0.0-1.0] 范围。所以 RGB(255, 162, 0) -> RGBF(1.0, 1.0, 0.0) == RGB(255, 255, 0),它是黄色的。
使用[0.0-1.0] 范围内的浮点颜色,或者对(我假设)您的glColorPointer()
调用的type
参数使用GLubyte
和GL_UNSIGNED_BYTE
数组。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 2D数组来自文本输入,中间有空格
- 字符串-C++后显示的随机字符
- 继承期间显示未知行为的子类
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- 程序崩溃并显示"std::out_of_range"错误
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 为什么在C的循环中使用printf的Rust代码不显示输出,而在C++的循环中显示std::cout
- 从数据库实时显示QT c++中的数据
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 显示错误输出的简单数组排序程序
- Qt自定义QPush按钮未显示在布局上
- C++射线示踪剂ppm表示没有足够的数据来显示图像
- 显示基于用户输入的整数的字符
- 试图显示纹理,但只能使用OpenGL获得纯色
- 当 M 是奇数时,如果它是对角线的中间,则在对角线交换后显示零
- 如何在显示屏的确切中间显示一些内容
- C++03 链接器"already defined symbol"未显示在中间文件中
- OpenGL 不显示中间色