Opengl es OpenGL绘制矩形轮廓
我试图画一个有4条线的矩形(左一条)。但不管我怎么画(条状、环形、普通线),结果都是右边的——角落缺少像素Opengl es OpenGL绘制矩形轮廓,opengl-es,Opengl Es,我试图画一个有4条线的矩形(左一条)。但不管我怎么画(条状、环形、普通线),结果都是右边的——角落缺少像素 ||||||||||| |||||||||| | | | | | | | | ||||||||||| |||||||||| 有没有办法得到左手边的结果 编辑 无法发布代码,因为它在很大程度上依赖于底层框架,但所有的draw调用都只不过是glDrawElements,索引缓冲区指向4个顶点,没有
||||||||||| ||||||||||
| | | |
| | | |
||||||||||| ||||||||||
有没有办法得到左手边的结果
编辑
无法发布代码,因为它在很大程度上依赖于底层框架,但所有的draw调用都只不过是glDrawElements,索引缓冲区指向4个顶点,没有alpha测试
按照建议摆弄坐标后,得出了这个有趣的结果(iOS模拟器):
请注意,只有左上角缺少某些矩形的像素。。。
所有矩形都是在单绘制元素调用中以GL_线模式绘制的。没有画其他东西
编辑2
问题14.100指出
OpenGL没有提供一种机制来干净地连接共享公共顶点的线,也没有干净地覆盖端点
稍微移动坐标帧,使线条落在像素中心:
#包括
无效显示()
{
glClear(GLU颜色缓冲位);
glMatrixMode(GL_投影);
glLoadIdentity();
双w=glutGet(GLUT\U窗口\U宽度);
双h=glutGet(GLUT\U窗口\U高度);
格洛托(0,w,0,h,-1,1);
glMatrixMode(GLU模型视图);
glLoadIdentity();
//重要的
glTranslatef(0.5,0.5,0);
浮动偏移=40;
glColor3ub(255,0,0);
glBegin(GL_线_环);
glVertex2f(0+偏移,0+偏移);
glVertex2f(0+偏移,h-偏移);
glVertex2f(w偏移,h偏移);
glVertex2f(w偏移,0+偏移);
格伦德();
glutSwapBuffers();
}
int main(int argc,字符**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
glutInitWindowSize(320240);
创建窗口(“Rect”);
glutDisplayFunc(显示器);
glutMainLoop();
返回0;
}
给我们看看你的代码怎么样?另外,你是在使用桌面OpenGL还是OpenGL ES?我在iOS模拟器上使用OpenGL ES
#include <GL/glut.h>
void display()
{
glClear( GL_COLOR_BUFFER_BIT );
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
double w = glutGet( GLUT_WINDOW_WIDTH );
double h = glutGet( GLUT_WINDOW_HEIGHT );
glOrtho( 0, w, 0, h, -1, 1);
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
// important
glTranslatef( 0.5, 0.5, 0 );
float offset = 40;
glColor3ub( 255, 0, 0 );
glBegin(GL_LINE_LOOP);
glVertex2f( 0+offset, 0+offset );
glVertex2f( 0+offset, h-offset );
glVertex2f( w-offset, h-offset );
glVertex2f( w-offset, 0+offset );
glEnd();
glutSwapBuffers();
}
int main( int argc, char **argv )
{
glutInit( &argc, argv );
glutInitDisplayMode( GLUT_RGBA | GLUT_DOUBLE );
glutInitWindowSize( 320,240 );
glutCreateWindow( "Rect" );
glutDisplayFunc( display );
glutMainLoop();
return 0;
}