我有以下问题.虽然glPolygonOffset适用于网格,例如当我尝试在对象顶部绘制线框轮廓时,它不适用于简单的线条.
以下是它对网格的工作原理:
// draw object
mTexture.enableAndBind();
gl::color( Colorf( 1, 1, 1 ) );
gl::draw( mVboMesh );
mTexture.unbind();
// overlay wireframe
gl::enableWireframe();
glLineWidth(1);
glEnable( GL_POLYGON_OFFSET_LINE );
glPolygonOffset( -1, -1 );
glColor3f( 0, 0, 1 );
gl::draw( mVboMesh );
glDisable( GL_POLYGON_OFFSET_LINE );
gl::disableWireframe();
Run Code Online (Sandbox Code Playgroud)

由于某种原因,它不适用于线路.我想要实现的是在网格上绘制坐标框架的箭头.我正在使用与GL_POLYGON_OFFSET_LINE绘制线条时相同的模式,就像我在对象上做线框一样.但是在这种情况下glPolygonOffset( -1, -1 );绝对没有区别.我已经尝试过像100这样的巨大价值而且它是一样的.绝对没有效果.这是我正在做的事情:
// enable 3D rendering
gl::enable( GL_CULL_FACE );
gl::enableDepthRead();
gl::enableDepthWrite();
// drawing the grid
int size = 2000;
int step = 25;
gl::color( Colorf( 0.2f, 0.2f, 0.2f ) );
for( float i = -size; i <= size; i += step )
{
glBegin( GL_LINES );
glVertex3f( i, 0, -size );
glVertex3f( i, 0, size );
glVertex3f( -size, 0, i );
glVertex3f( size, 0, i );
glEnd( );
}
// drawing the arrows
glEnable( GL_POLYGON_OFFSET_LINE );
glPolygonOffset( -1, -1 );
glBegin( GL_LINES );
gl::color( Colorf( 1, 0, 0 ) );
glVertex3f( 0, 0, 0 );
glVertex3f( 100, 0, 0 );
gl::color( Colorf( 0, 1, 0 ) );
glVertex3f( 0, 0, 0 );
glVertex3f( 0, 100, 0 );
gl::color( Colorf( 0, 0, 1 ) );
glVertex3f( 0, 0, 0 );
glVertex3f( 0, 0, 100 );
glEnd( );
glDisable( GL_POLYGON_OFFSET_LINE );
// disable 3D rendering
gl::disableDepthWrite();
gl::disableDepthRead();
gl::disable( GL_CULL_FACE );
Run Code Online (Sandbox Code Playgroud)
以及我得到的Z战斗的一个例子:

我试过的一个黑客和完美的工作是:
然而,这是一个非常特殊的情况,虽然它适用于平面网格和箭头,但对于具有复杂形状的其他任何东西都不适用.
我的问题是:
//我正在使用Cinder作为框架,但由于我使用的是原始OpenGL命令,因此无关紧要
更新
我已经在第一条评论中检查了答案,并尝试了这种方法,但是那个方法也不起作用,因为结果取决于与相机的距离.
//// draw coordinate frame and grid
glDepthRange (0.01, 1.0);
drawGrid( 2000.0f, 25.0f );
glDepthRange (0.0, 0.99);
gl::drawCoordinateFrame( 100.0f, 5.0f, 2.0f );
glDepthRange (0.0, 1.0);
// draw object
Run Code Online (Sandbox Code Playgroud)

小智 3
我猜想一个技巧可能是将线画得离视点更近一些(假设更近 0.1)。这应该可以避免 z-fight。
为此,您需要计算从您的点到 POV 位置的归一化方向矢量。然后用一个小系数对其进行缩放,并将其添加到线点坐标中
| 归档时间: |
|
| 查看次数: |
3177 次 |
| 最近记录: |