将渲染放在未知的曲面上

时间:2014-03-25 13:41:36

标签: opengl textures stencil-buffer decal

想要将多个不规则纹理贴花到曲面上(使用xyz顶点和每个指定的uv的网格)。我正在从模型文件中加载网格物体,并且没有任何关于表面的先验知识...我们所知道的是它将具有合理的" uv映射。想要选择几个紫外区域并对它们应用纹理。每个区域由uv坐标中的边界多边形指定。在这种情况下,不知道等效的xyz poly,或者我认为答案很简单。

我们将此工作用于平面和简单的圆柱面(我们将其近似为一系列扁平条纹,通过选择法线作为平均值进行平滑处理)。在这两种情况下,我们都知道从uv到xyz的唯一映射,因此我们设置模板缓冲区,通过在绑定纹理和绘制真实曲面之前将等效的xyz poly绘制到模板缓冲区来限制绘制到所需的uv区域。

我们还在纹理中将rgba透明度用于表面上。通常,每个纹理区域都是一个小的旋转矩形,因此我们将四个顶点绘制到模板缓冲区,然后使用纹理矩阵旋转它,并使用纹理内的rgba透明度来确保仅应用纹理的右侧部分。一切都很好。

想重用我们的工作代码,但现在将这些纹理应用于任意曲面/网格。我们正在加载和绘制这些模型,并且已经可以将纹理应用于整个面[即uv从(0,0)到(1,1)]。现在我们想要扩展它并应用"放置"纹理到每个表面的区域。

认为有可能直接将uv poly绘制到模板缓冲区,甚至不知道等效的xyz poly ...然后所有现有代码都可以工作。也许可以像帧缓冲对象那样使用一些技巧,然后将模板多边形初始绘制到那个,然后在"真实"中使用它作为模板。绘制曲面网格。这会是一个好方法吗?或者有更好的方法吗?

任何有关样品的建议或网址链接欢迎...... PS看了这些线程......我认为有点但不完全相同的问题......

Binding a stencil render buffer to a frame buffer in opengl

Visualizing the Stencil Buffer to a texture

我目前正在研究一些有用于屏幕外阴影贴图的FBO设置/使用代码,并尝试使其适用于这种看似简单的情况。我不清楚的是需要设置gl调用...我对如何设置它感到困惑。这是硬件阴影FBO设置的摘录,其中的位被切掉并且??补充......这里对正确序列的任何帮助表示赞赏。

glBindTexture(GL_TEXTURE_2D, tex); 
?? not
::glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32, shadowsize, shadowsize, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, NULL);
?? but a more normal binding approp to drawing RGBA textures 
::glBindTexture(GL_TEXTURE_2D, 0); 
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_Framebuffer); 

// Attach everything, tell fbo there will be a drawbuffer, unlike shadows tex draw 
// ?? use GL_COLOR_ATTACHMENT0_EXT 
glDrawBuffer(GL_NONE); 
// no color buffer dest...
??wrong glReadBuffer(GL_NONE); 
// no color buffer src 
?? glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, tex, 0); 
//??

注意:texm_Frambufferints,正确分配了textureid和framebuffer,认为该位正常。我的主要困惑是

  1. 似乎代码将glBindTexture,glTexImage2D,glBindTexture发布为0:这是否正确发布?
  2. 需要glDrawBuffer + glReadBuffer调用吗?

0 个答案:

没有答案