����ʵ������
Table of Contents
1 ����ʵ������
1.1 ����
1.2 ���
һЩijЩԶ�������λ����ڽ���������֮�ϵĶ���
1.3 ����
�������˵�������3D�����һЩ����ڴ������Ҽ��������������һ�� Effects �˵������������û����һЩ3D��ͼ���ܡ�
2 ����ͱ�����
- ���ã������Ѿ�֪���϶����ᱻ���Ƶļ���ͼ�Σ��Ի��������������ߡ�
һ������������·�ʽ������
glEnable(GL_CULL_FACE);
��Ӧ�ģ��������·�ʽ�رա�
glDisable(GL_CULL_FACE);
��ע�⣬���Dz�û��ָ�����������滹�DZ��档����������һ������
glCullFace
���Ƶġ�void glCullFace(GLenum mode);
mode�IJ����Ŀ���ֵΪ
GL_FRONT
��GL_Back
��GL_FRONT_AND_BACK
��������Ҫ�������������������ڲ�����ͼ�ξ���Ҫ���д��롣glCullFace(GL_BACK); glEnable(GL_CULL_FACE);
�����˱��������Σ��������ص��Ķ����ڲ�ʹ����Ȳ��Ե�����¿��ܳ�����
3 ��Ȳ���
- ���ã�ʹzֵ�ϴ�����ص㿿���۲��ߣ�����zֵ��С�����ص�
���һ�����Ƶ�������������ǰ���Ƶ����������ǰ�棨�е�����ͼ�㣩��Ϊ�˰���Щ����ŵ����棬���ǿ���ʹ��һ�ֳ�Ϊ ��Ȳ��� ��������������������
��Ȳ�����һ����Ч���������ر��������ļ��ɣ�OpenGL�ṩ��һЩ������������Ļ���������������ĸ���dz�����һ�����ر�����ʱ������������һ��ֵ����Ϊzֵ�����Ա�ʾ���۲���֮��ľ��롣�Ժ������ĻΪֻ��Ҫ������һ������ʱ�������ص�zֵ�ͻ���ԭ���Ѿ��洢���Ǹ����ؽ��бȽϡ���������ص�zֵ���ߣ����������۲��ߣ����λ����ǰ�Ǹ����ص�ǰ�档����������λ��ԭ���Ǹ����صĺ��棬�Ҳ�����סǰ����Ǹ����ء����ڲ������������ͨ����Ȼ�����ʵ�ֵģ����洢����Ļ��ÿ�����ص����ֵ��
������ʹ��GLUT����OpenGL���ڵ�ʱ��Ӧ������һ����Ȼ����������磬���ǿ��������·�ʽ����һ����ɫ��������һ����Ȼ�������
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
Ϊ��������Ȳ��ԣ�ֻҪ�ĵ���
glEnable(GL_DEPTH_TEST);
ʹ����Ȳ���
4 �����ģʽ
void glPolygonMode(GLenum face, GLenum mode);
- face ��ȡֵ�����ǿ��ԶԶ���ε����棨
GL_FRONT_AND_BACK
����Ӧ�������Ⱦģʽ��Ҳ����ֻ�Զ���ε����棨GL_FRONT
�����棨GL_BACK
��Ӧ�����ģʽ�� - mode ��ȡֵ����Ĭ������£�����α����Ƴ�ʵ�ģ�
GL_FILL
���ġ����ǣ�Ҳ���Ըı������Ϊ��ָ��ֻ���ƶ���ε����GL_LINE
��������ֻ���Ƶ㣨GL_POINT
����glPolygonMode
���������������Ϊʵ��ͼ�Ρ������ߵ������Ⱦ��
ʹ�� glPolygonMode �Ѷ���ε�����ͱ�����Ϊ�߿�ģʽ
ʹ�� glPolygonMode �Ѷ���ε�����ͱ�����Ϊ����ģʽ
5 �����ƫ��
��Ȼ��Ȳ����ܹ�ʵ����ʵ�Ӿ���������ܣ�����ʱ��������Ҫ������ƭ��һ�¡������������������Ҫ����������ͼ�λ��Ƶ�ͬһ���ʱ������������� z-fighting ��z��ͻ�����⡣
glPolygonOffset
����ʹ���ǿ��Ե���Ƭ�ε����ֵ���������� ʹ���ֵ����ƫ�� ������ʵ�ʸı�3D�ռ��е�����λ�á�
void glPolygonOffset(GLfloat factor, GLfloat units);
Ӧ�õ�Ƭ���ϵ���ƫ�ƿ���������ķ���ʽ����ʾ��
\[ \mbox{Depth Offset} = (\mbox{DZ} \times \mbox{factor}) + (r \times \mbox{units}) \]
���� \(\mbox{DZ}\) �����ֵ��zֵ������ڶ������Ļ����ı仯������r����ʹ��Ȼ�����ֵ�����仯����Сֵ����û��һ��Ӳ�Թ涨�ܹ��ҵ�һ������һʧ��ֵ�����Ǿ������õ�ʱ������Ҫ����һ�¡�
��ֵ��ʹzֵ�������Ǹ���������ֵ��Ὣ�����ƶ��ø�Զ������Primitivesʾ��������˵�����ǽ�factor��units������ֵ������Ϊ-1.0��
����ʹ�� glPolygonOffset
����ƫ��ֵ֮�⣬���������ö���ε���ƫ������伸��ͼ�Σ� GL_POLYGON_OFFSET_FILL
�����ߣ� GL_POLYGON_OFFSET_LINE
���͵㣨 GL_POLYGON_OFFSET_POINT
��������Ĵ�����ʾ��Primitivesʾ�������е�һ���������������������һ����ɫ�ļ���ͼ�Σ�����������������ǵĺ�ɫ�߿���ע�⣬����Ϊ��ʹ��ʾЧ�����ã���������ʹ���˸��ֵĿ�����ߡ��ڽ�������������������У����ǽ���һ�����ۿ���ݡ�
///////////////////////////////////////////////////////////////////////// void DrawWireFramedBatch(GLBatch* pBatch) { // Draw the batch solid green shaderManager.UseStockShader(GLT_SHADER_FLAT, transformPipeline.GetModelViewProjectionMatrix(), vGreen); pBatch->Draw(); // Draw black outline glPolygonOffset(-1.0f, -1.0f); // Shift depth values glEnable(GL_POLYGON_OFFSET_LINE); // Draw lines antialiased glEnable(GL_LINE_SMOOTH); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // Draw black wireframe version of geometry glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); glLineWidth(2.5f); shaderManager.UseStockShader(GLT_SHADER_FLAT, transformPipeline.GetModelViewProjectionMatrix(), vBlack); pBatch->Draw(); // Put everything back the way we found it glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glDisable(GL_POLYGON_OFFSET_LINE); glLineWidth(1.0f); glDisable(GL_BLEND); glDisable(GL_LINE_SMOOTH); }
6 �ü������вü�
��һ�������Ⱦ���ܵķ�����ֻ����Ļ�Ͻ������ĵIJ��ֽ��и��¡����ǻ�������Ҫ��OpenGL ����Ⱦ���������ڴ����ڲ�һ���С�ľ��������� ��OpenGL�����ڴ�����ָ��һ���ü����Σ�����Ⱦֻ����������ڽ��С���Ĭ������£��ü����ξ��Ǵ��ڵĴ�С��������вü����ԡ����ǿ���ʹ���������glEnable�������ü����ԡ�
glEnable(GL_SCISSOR_TEST);
�����ڲ�ִ����Ⱦ���Ǹ������Ϊ�ü���scissor box�� ��������������������Դ������꣨���أ�����ʽָ���ġ�
void glScissor(GLint x, GLint y, GLsizei width, GLsizei height);
x��y����ָ���˲ü�������½ǣ�width��height������ֱ�ָ���˲ü���Ŀ��Ⱥ߶ȡ�����ij�����ʾ��ʾ������SCISSOR����Ⱦ���롣������������3����ɫ��������ÿ�������֮ǰ��ָ��һ����С�IJü���������һ���ص�����ɫģ�͡�
6.1 ʾ������
CANNOT INCLUDE FILE ./program/opengl/Src/Chapter03/Scissor/Scissor.cpp