?? drawfield.cc
字號:
#include "monitorframe.ih"void MonitorFrame::drawField(){ static GLuint fieldList = 0; if (fieldList == 0) { fieldList = glGenLists(1); glNewList(fieldList, GL_COMPILE); // Draw field glTexImage2D(GL_TEXTURE_2D, 0, 3, 512, 512, 0, GL_RGB, GL_UNSIGNED_BYTE, d_grassTex); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); double fl = d_gameModel.getVarDbl(GameModel::FieldLength) / 2; double fw = d_gameModel.getVarDbl(GameModel::FieldWidth) / 2; double flb = fl + d_gameModel.getVarDbl(GameModel::BorderSize); double fwb = fw + d_gameModel.getVarDbl(GameModel::BorderSize); GLfloat material_border_aandd[] = {0.0, 0.75, 0.0, 1.0}; GLfloat material_field_aandd[] = {0.0, 0.5, 0.0, 1.0}; GLfloat material_lines_aandd[] = {1.0, 1.0, 1.0, 1.0}; glNormal3f(0.0, 0.0, 1.0); glBegin(GL_QUADS); //glColor3f(0, 0.75, 0.0); glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, material_border_aandd); glVertex3f(-flb, -fwb, 0.0); glVertex3f(-flb, fwb, 0.0); glVertex3f(flb, fwb, 0.0); glVertex3f(flb, -fwb, 0.0); glEnd(); glEnable(GL_TEXTURE_2D); glBegin(GL_QUADS); //glColor3f(0, 0.5, 0.0); glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, material_field_aandd); glTexCoord2f(0.0, 0.0); glVertex3f(-fl, -fw, 0.0); glTexCoord2f(0.0, 2.0); glVertex3f(-fl, fw, 0.0); glTexCoord2f(3.0, 2.0); glVertex3f(fl, fw, 0.0); glTexCoord2f(3.0, 0.0); glVertex3f(fl, -fw, 0.0); glEnd(); glDisable(GL_TEXTURE_2D); // glBegin(GL_TRIANGLES); // drawObject(*d_gfxField); // glEnd(); //glColor3f(1.0, 1.0, 1.0); glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, material_lines_aandd); glBegin(GL_LINE_LOOP); // Draw side lines glVertex3f(-fl, -fw, 0.0); glVertex3f(fl, -fw, 0.0); glVertex3f(fl, fw, 0.0); glVertex3f(-fl, fw, 0.0); glEnd(); glBegin(GL_LINES); // Draw middle line glVertex3f(0.0, -fw, 0.0); glVertex3f(0.0, fw, 0.0); glEnd(); glBegin(GL_LINE_LOOP); // Draw middle circle double r = 9.15; double dalpha = M_PI / 16; for (double alpha = 0; alpha < 2 * M_PI; alpha += dalpha) { double x = r * cos(alpha); double y = r * sin(alpha); glVertex3f(x, y, 0.0); } glEnd(); double goalDepth = d_gameModel.getVarDbl(GameModel::GoalDepth); double goalWidth = d_gameModel.getVarDbl(GameModel::GoalWidth); glBegin(GL_LINE_STRIP); // Draw left goal glVertex3f(-fl, 0.5 * goalWidth, 0.0); glVertex3f(-fl - goalDepth, 0.5 * goalWidth, 0.0); glVertex3f(-fl - goalDepth, -0.5 * goalWidth, 0.0); glVertex3f(-fl, -0.5 * goalWidth, 0.0); glEnd(); glBegin(GL_LINE_STRIP); // Draw right goal glVertex3f(fl, 0.5 * goalWidth, 0.0); glVertex3f(fl + goalDepth, 0.5 * goalWidth, 0.0); glVertex3f(fl + goalDepth, -0.5 * goalWidth, 0.0); glVertex3f(fl, -0.5 * goalWidth, 0.0); glEnd(); glBegin(GL_LINE_STRIP); // Draw left goal area glVertex3f(-fl, 0.5 * goalWidth + 5.5, 0.0); glVertex3f(-fl + 5.5, 0.5 * goalWidth + 5.5, 0.0); glVertex3f(-fl + 5.5, -0.5 * goalWidth - 5.5, 0.0); glVertex3f(-fl, -0.5 * goalWidth - 5.5, 0.0); glEnd(); glBegin(GL_LINE_STRIP); // Draw right goal area glVertex3f(fl, 0.5 * goalWidth + 5.5, 0.0); glVertex3f(fl - 5.5, 0.5 * goalWidth + 5.5, 0.0); glVertex3f(fl - 5.5, -0.5 * goalWidth - 5.5, 0.0); glVertex3f(fl, -0.5 * goalWidth - 5.5, 0.0); glEnd(); glBegin(GL_LINE_STRIP); // Draw left penalty area glVertex3f(-fl, 0.5 * goalWidth + 16.5, 0.0); glVertex3f(-fl + 16.5, 0.5 * goalWidth + 16.5, 0.0); glVertex3f(-fl + 16.5, -0.5 * goalWidth - 16.5, 0.0); glVertex3f(-fl, -0.5 * goalWidth - 16.5, 0.0); glEnd(); glBegin(GL_LINE_STRIP); // Draw right penalty area glVertex3f(fl, 0.5 * goalWidth + 16.5, 0.0); glVertex3f(fl - 16.5, 0.5 * goalWidth + 16.5, 0.0); glVertex3f(fl - 16.5, -0.5 * goalWidth - 16.5, 0.0); glVertex3f(fl, -0.5 * goalWidth - 16.5, 0.0); glEnd(); glEndList(); } glCallList(fieldList);}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -