使用opengl在球体上渲染图像

时间:2015-06-25 14:50:20

标签: c++ opencv opengl

我想在任何类型的球体上渲染图像(例如jpg tif bmp)。所以我尝试使用opencv和opengl来完成这项工作。但是对于opengl来说我是新手。

下面是我使用的代码。

theme_set(mytheme())
ggplot(data = mtcars, aes(x = mpg)) +
    geom_point(aes(y = hp))
# note we don't need to add it to the plot this time since we've
# set it as the default

我暂时不能张贴照片; EEE EEE ......... 图片非常正常(来自维基的地图),如下所示。

但是,当我更改视图位置时,球体上有一个错误。我的代码中有错误吗?有人可以说出它为什么会发生?

//更新:2015年6月28日

最后,我发现了这个错误。 函数gluPerspective()不能取0.0f指定从观察者到近剪裁平面的距离;我认为0.0f可能会扰乱项目的基础;所以该值必须大于零; 下面是代码dismistaked;

void createTex(Mat &img)
{
    glGenTextures(2, m_texnames);
    glBindTexture(GL_TEXTURE_2D, m_texnames[0]);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPLACE);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPLACE);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    gluBuild2DMipmaps(GL_TEXTURE_2D, 3, img.cols, img.rows, GL_BGR_EXT, GL_UNSIGNED_BYTE, img.data);
}
void sphere()
{
    glEnable(GL_TEXTURE_2D);
    createTex(src);
    glBindTexture(GL_TEXTURE_2D, m_texnames[0]);
    glPushMatrix();
    gluQuadricTexture(g_text, GLU_TRUE);             
    gluQuadricDrawStyle(g_text, GLU_FILL);           
    gluSphere(g_text, 1.0, 64, 64); /*draw sun */
    glPopMatrix();
    glDisable(GL_TEXTURE_2D);
}

virtual void onDisplay()
{
    glClear(GL_COLOR_BUFFER_BIT);
    validateCameraPosition();
    validateModelPosition();
    sphere();
    glFlush();
    glutSwapBuffers();
}

1 个答案:

答案 0 :(得分:0)

不确定这是否会有所帮助..但仍然比没有答案好。

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPLACE);

我不认为glTexParameterf应该用于GL_TEXTURE_WRAP_S。最好是glTextParameteri。另外,我认为GL_REPLACE不是有效值。见this reference。我宁愿:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

当pname为GL_TEXTURE_ENV_MODE时,实际使用GL_REPLACE的函数为glTexEnvi

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

Here是一个董事会,有些人就此进行了讨论。

个人提示:我会远离glu并尝试使用现代OpenGL练习渲染。 Useful tutorial

相关问题