void RegionViewer::drawTransition(Surface *dst, int room, Direction direction, int prevRoom, Direction prevDirection, Direction transitionDirection, double time, Player *player, list<Bounce *> bounceList, list<Bounce *> prevBounceList) { if (!finishedPainting()) { draw(dst, room, direction); return; } Surface *prevSurface = m_roomSurfaces[prevDirection][prevRoom]; Surface *nextSurface = m_roomSurfaces[direction][room]; int vx = 0; int vy = 0; switch (transitionDirection) { case NORTH: vy = -1; break; case SOUTH: vy = 1; break; case WEST: vx = -1; break; case EAST: vx = 1; break; default: break; } vx *= m_roomWidth; vy *= m_roomHeight; int prevX = -vx * (1 - time); int prevY = -vy * (1 - time); int nextX = vx * time; int nextY = vy * time; drawRoom(dst, prevSurface, prevX, prevY); drawRoom(dst, nextSurface, nextX, nextY); player->draw(dst, nextX, nextY); for (auto bounce : bounceList) bounce->draw(dst, nextX, nextY); for (auto bounce : prevBounceList) bounce->draw(dst, prevX, prevY); }
void MirrorDemo::drawScene() { // Clear the backbuffer and depth buffer. HR(gd3dDevice->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER | D3DCLEAR_STENCIL, 0xffeeeeee, 1.0f, 0)); HR(gd3dDevice->BeginScene()); HR(mFX->SetTechnique(mhTech)); HR(mFX->SetValue(mhLightVecW, &mLightVecW, sizeof(D3DXVECTOR3))); HR(mFX->SetValue(mhDiffuseLight, &mDiffuseLight, sizeof(D3DXCOLOR))); HR(mFX->SetValue(mhAmbientLight, &mAmbientLight, sizeof(D3DXCOLOR))); HR(mFX->SetValue(mhSpecularLight, &mSpecularLight, sizeof(D3DXCOLOR))); // All objects use the same material. HR(mFX->SetValue(mhAmbientMtrl, &mWhiteMtrl.ambient, sizeof(D3DXCOLOR))); HR(mFX->SetValue(mhDiffuseMtrl, &mWhiteMtrl.diffuse, sizeof(D3DXCOLOR))); HR(mFX->SetValue(mhSpecularMtrl, &mWhiteMtrl.spec, sizeof(D3DXCOLOR))); HR(mFX->SetFloat(mhSpecularPower, mWhiteMtrl.specPower)); drawRoom(); drawMirror(); drawTeapot(); drawReflectedTeapot(); mGfxStats->display(); HR(gd3dDevice->EndScene()); // Present the backbuffer. HR(gd3dDevice->Present(0, 0, 0, 0)); }
void drawScene(camera_s* c, portal_s* p, int depth, u8 stencil) { if(!c)return; gsMatrixMode(GS_MODELVIEW); gsPushMatrix(); gsLoadIdentity(); useCamera(c); drawRoom(&testRoom); drawCubeDispensers(); drawEnergyDevices(); drawEnergyBalls(); drawPlatforms(); drawBigButtons(); drawTimedButtons(); drawWallDoors(); drawDoors(); drawOBBs(); if(p && depth)drawPlayer(&testPlayer); drawSludge(&testRoom); drawEmancipators(); drawEmancipationGrids(); if(p == &portals[0])drawPortals((portal_s*[]){&portals[0]}, 1, drawScene, c, depth, stencil);
void TileMap::drawAllRooms(){ for(z=0; z < numRooms; z++){ drawRoom(z); } }
static void display() { // Position Vertex vert pos; replaceVert(&pos, 0, 0, 0); // Erase the window and the depth buffer glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); // Enable Z-buffering in OpenGL glEnable(GL_DEPTH_TEST); // Undo previous transformations glLoadIdentity(); // Switch to manipulating the model matrix glMatrixMode(GL_MODELVIEW); // Undo previous transformations glLoadIdentity(); // User Rotation glRotatef(xrot, 1, 0, 0); glRotatef(yrot, 0, 1, 0); // Main Room drawRoom(); glColor3f(1,1,1); // Draw Cylinder glPushMatrix(); replaceVert(&pos, 0, 1.75, 0); drawCylinder(0.125, 1.5, pos, cyl_verts); glPopMatrix(); // Draw Box Method (Coordinates used as verts) replaceVert(&pos, -1.25, -1.25, 0); drawBox(1, 1, 2.5, pos); replaceVert(&pos, 1.25, 0, -2); drawBox(1, 2.5, 0.125, pos); glPushMatrix(); // Draw Box Method, Translation glTranslatef(2, -2, 1.5); replaceVert(&pos, 0, 0, 0); drawBox(1, 1, 1, pos); glPopMatrix(); glColor3f(1, 1, 1); glWindowPos2i(5, 5); Print("Xrot: %.4f Yrot: %.4f", xrot, yrot); glFlush(); glutSwapBuffers(); }
void interpToks(struct gameData * bigPicPtr) { int i=0; while(strcmp(bigPicPtr->tok[i], "end") != 0) { // First element from the string tokenized char * f = &bigPicPtr->tok[i][0]; // CASE - Room dimensions rowXcol if (isdigit(bigPicPtr->tok[i][0]) != 0) { drawRoom(bigPicPtr->tok[i], bigPicPtr); } // CASE - Draw the doors else if (strncmp(f, "d", 1) == 0) { drawDoors(bigPicPtr, i); } else { int j=0; int coord[2]; char * s = &bigPicPtr->tok[i][1]; while ((s = strtok(s, ",")) != NULL) { coord[j] = atoi(s); s = NULL; j++; } int room = bigPicPtr->room - 2; int row = bigPicPtr->sqrPos[room][0]; int col = bigPicPtr->sqrPos[room][1]; coord[0] = coord[0] + 1; // Considering first position of room as 0x0 coord[1] = coord[1] + 1; if (strncmp(f, "g", 1) == 0) mvwprintw(stdscr, row + coord[0], col + coord[1], "%s", "*"); if (strncmp(f, "p", 1) == 0) mvwprintw(stdscr, row + coord[0], col + coord[1], "%s", "p"); if (strncmp(f, "s", 1) == 0) mvwprintw(stdscr, row + coord[0], col + coord[1], "%s", "s"); if (strncmp(f, "m", 1) == 0) mvwprintw(stdscr, row + coord[0], col + coord[1], "%s", "?"); if (strncmp(f, "w", 1) == 0) mvwprintw(stdscr, row + coord[0], col + coord[1], "%s", ")"); if (strncmp(f, "M", 1) == 0) { mvwprintw(stdscr, row + coord[0], col + coord[1], "%s", "M"); bigPicPtr->nMonst++; } if (strncmp(f, "h", 1) == 0) { mvwprintw(stdscr, row + coord[0], col + coord[1], "%s", "@"); bigPicPtr->cRow = row + coord[0]; bigPicPtr->cCol = col + coord[1]; } } i++; } // Malloc monsters array bigPicPtr->MonstData = malloc(sizeof(int*)*bigPicPtr->nMonst); for(i=0; i<=bigPicPtr->nMonst; i++) { bigPicPtr->MonstData[i] = malloc(sizeof(int*)*3); } }
void Floor::drawMap(int x, int y, char sym){ int xRoom = 0; int yRoom = 0; for(int i = x-MAP_TILES_VISIBLE; i <= x+MAP_TILES_VISIBLE; i++){ for(int k = y-MAP_TILES_VISIBLE; k <= y+MAP_TILES_VISIBLE;k++){ //std::cout << xRoom << ":" << yRoom << "\n"; if(i == x && k == y){ drawRoom(xRoom,yRoom,i,k,sym); } else{ drawRoom(xRoom, yRoom, i, k, Tile::EMPTY_SPACE); } yRoom += Tile::TILE_WIDTH; } xRoom += Tile::TILE_HEIGHT; yRoom = 0; } }
void RegionViewer::draw(Surface *dst, int room, Direction direction) { if (finishedPainting()) { Surface *roomSurface = m_roomSurfaces[direction][room]; drawRoom(dst, roomSurface, 0, 0); } else drawProgress(dst); }
void draw() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); //Efface le frame buffer et le Z-buffer glMatrixMode(GL_MODELVIEW); //Choisit la matrice MODELVIEW glLoadIdentity(); //Réinitialise la matrice lookAt(character->getPos(),character->getDir(),character->getUp()); drawRoom(); drawOrigin(); drawScreenSurface(); drawMouse(); glutSwapBuffers(); glutPostRedisplay(); }
void Renderer::display(void) { //clear window glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); //draw splash screen if(splash){ glEnable(GL_TEXTURE_2D); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glBindTexture(GL_TEXTURE_2D, textureID[3]); glPushMatrix(); glBegin(GL_QUADS); glTexCoord2f(0.0f, 1.0f); glVertex3f(-1, 1, -2); glTexCoord2f(0.0f, 0.0f); glVertex3f(-1, -1, -2); glTexCoord2f(1.0f, 0.0f); glVertex3f(1, -1, -2); glTexCoord2f(1.0f, 1.0f); glVertex3f(1, 1, -2); glEnd(); glPopMatrix(); glDisable(GL_TEXTURE_2D); } else { if(lighting){ glEnable(GL_LIGHTING); } glPushMatrix(); //Push -- camera glLoadMatrixd(camera->getModelViewMatrix()); glPushMatrix(); //Push -- draw world drawRoom(); glPopMatrix(); //Pop -- draw world drawTreasures(); glPopMatrix(); //Pop -- camera if(lighting){ glDisable(GL_LIGHTING); } drawHUD(); frameCount++; } glutSwapBuffers(); }
void draw(Map** level, int xPos, int yPos, int room, Player * chris, Enemy * enemy[20], int * eneNum) { //declare variables int width, height; //intialize variables and srand width = level[room]->width; height = level[room]->height; srand(time(NULL)); //initailize cursor move(yPos, xPos); //call subdrawing functions drawRoom(&yPos, &xPos, width, height); drawElements(level, xPos, yPos, chris, room, width, height, enemy, eneNum); }//end draw
int main(int argc, char const *argv[]) { FILE *fp = NULL; char *buffer = malloc(sizeof(char) * 150); char roomElements[300] = {0}; char *roomSize = NULL; int i = 1; int *size = NULL; // does this need to be malloced? char input = '\0'; check(argc == 2, "Please enter two arguments"); fp = openFile((char*)argv[1], "r"); initscr(); noecho(); /*Draws rooms and items*/ while (fgets(buffer, 150, fp)) { removeNewLine(buffer); strcpy(roomElements, strchr(buffer, ' ')); roomSize = strtok(buffer, " "); // get the room size size = getRoomSize(roomSize, i); // convert room size to int pointer drawRoom(size, i); // draw the room tokenizeRoom(roomElements, i); // draw the elements i++; free(size); } /*This is the user input loop*/ do { input = getch(); getInput(input); } while (input != 'q'); free(buffer); fclose(fp); endwin(); return 0; error: return -1; }
void displayObjects(int frame_no, int sceneRotation) { GLfloat mat_diffuse[] = { lightIntense*0.5, lightIntense*0.5, lightIntense*0.5, 1.0 }; glLightfv(GL_LIGHT1, GL_DIFFUSE, mat_diffuse); reshape (glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT)); glDepthMask(GL_TRUE); glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); glPushMatrix(); //scene //glTranslatef( 0.0, 0.0, -55.0 ); //glRotatef( 180.0, 1.0, 0.0, 0.0 ); //glRotatef( 90.0, 0.0, 1.0, 0.0 ); glPushMatrix(); //group 1 //glRotatef( 45*sin((float)sceneRotation*0.01), 1.0, 0.0, 0.0 ); //glRotatef( 100.0, 0.0, 1.0, 0.0 ); //glRotatef( (float)sceneRotation*1.0, 0.0, 1.0, 0.0 ); glPushMatrix(); //drawHelpers(); glPopMatrix(); glPushMatrix(); drawRoom(); drawCrankshaft(frame_no ); draw4Pistons( frame_no ); putFlywheel(frame_no); drawCovers(frame_no + 90, transEnable); //drawValve(); //drawCamshaft(); //debug //drawCamshaftCoverLeft(); // debug //drawTriangle(); // debug //drawFlywheel(); // debug //drawCamshaftMechanism(); //debug glPopMatrix(); glPopMatrix(); //end of group 1 glPopMatrix(); //end of scene }
void display(void) { //step1:環境マップの作成 //オブジェクト中心から見た6方向のシーンを作成し、テクスチャメモリに転送 //framebuffer object を有効化 glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, fbName ); // 透視変換行列の設定 (texture作成) glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(90.0, 1.0, 0.1, 30.0);//視野角を90° // モデルビュー変換行列の設定 glMatrixMode(GL_MODELVIEW); glLoadIdentity(); // オブジェクトから見たシーンをテクスチャに利用 for (int i = 0; i < 6; ++i) { glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, target[i].name, texName, 0); glViewport(0, 0, TEX_WIDTH, TEX_HEIGHT); //カラーバッファ,デプスバッファのクリア glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // オブジェクト中心から見えるものをレンダリング glPushMatrix(); gluLookAt(pos[0], pos[1], pos[2], pos[0]+target[i].cx, pos[1]+target[i].cy, pos[2]+target[i].cz, target[i].ux, target[i].uy, target[i].uz); glLightfv(GL_LIGHT0, GL_POSITION, lightPos); //3D空間の描画 drawRoom(10.0, 10.0, 5.0); glTranslatef(0.0, 1.0, 0.0); pet.draw(frameCount); glPopMatrix(); } glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, 0 ); //step2:通常の描画ルーチンに戻す //カラーバッファ,デプスバッファのクリア glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); resize(width, height); //texture unit と texture object の関連付け glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_CUBE_MAP, texName); // シェーダプログラムの適用 glUseProgram(shaderProg); GLint tranLoc = glGetUniformLocation(shaderProg, "transparency"); glUniform1f(tranLoc, transparency0); GLint ratioLoc = glGetUniformLocation(shaderProg, "nRatio"); glUniform1f(ratioLoc, nRatio0); float m[16] ; glGetFloatv(GL_MODELVIEW_MATRIX, m); GLint ViewTransLoc = glGetUniformLocation(shaderProg, "ViewTranspose"); glUniformMatrix4fv(ViewTransLoc, 1, GL_TRUE, m); //光源設定//'l'を押した後光源位置可変 glLightfv(GL_LIGHT0, GL_POSITION, lightPos); if(flagWireframe)//'w'でwireframeとsolid model切り替え { glPolygonMode(GL_FRONT,GL_LINE); glPolygonMode(GL_BACK,GL_POINT); } else glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); //fragment shaderのユニフォーム変数texのインデックスを取得 GLint samplerLoc = glGetUniformLocation(shaderProg, "sampler"); glUniform1i(samplerLoc, 0);//GL_TEXTURE0を適用 //描画 draw(); // シェーダプログラムの適用を解除 glUseProgram(0); drawRoom(10.0, 10.0, 5.0);//room2.hにある glTranslatef(0.0, 1.0, 0.0); pet.draw(frameCount); curTime = timeGetTime(); //1コマの所要時間 float dt = (float)(curTime - lastTime) * 0.001;//sec lastTime = curTime; elapseTime += dt; fps ++; if(elapseTime >= 1.0) { printf("frame per sec = %d , dt = %f\n", fps, dt); elapseTime = 0.0; fps = 0; } frameCount++; if(flagHelp) { printf("矢印キーによるアフィン変換/光源移動 \n"); printf(" →,←:x軸 \n"); printf(" ↑,↓:y軸 \n"); printf(" [Shift]+↑,↓:z軸 \n"); printf(" 'r'を押した後:回転 \n"); printf(" 't'を押した後:平行移動 \n"); printf(" 's'を押した後:スケーリング \n"); printf(" 'l'を押した後、光源位置の移動可 \n"); printf("'w'でワイヤーフレームとソリッドモデル切り替え \n"); printf("マウス操作で視点変更可 \n"); printf(" dolly:中央付近を左ボタンクリックで近づき,右ボタンクリックで遠ざかる \n"); printf(" pan:左横および右横を右ボタンクリックで注視点が左右に変化する \n"); printf(" tilt:真上および真下を右ボタンクリックで注視点が上下に変化する \n"); printf(" tumble:左右にドラッグすると視点が左右に変化する \n"); printf(" crane:上下にドラッグすると視点が上下に変化する \n"); printf(" zoom:左下を右ボタンクリックでズームイン \n"); printf(" 右下を右ボタンクリックでズームアウト \n"); printf("[Shift]+'r'でリセット \n"); printf("[F1]キー:アニメーションスタート \n"); printf("[F2]キー:透過率の増減 \n"); printf("[F3]キー:屈折率の増減 \n"); flagHelp = false; } //終了 glutSwapBuffers(); }
void drawFrame() { // Borramos el buffer de color y el de profundidad glClearColor(SCREEN_COLOR); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Posicionamos la cámara (V) glMatrixMode(GL_MODELVIEW); glLoadIdentity(); //drawInterface(); // Posicionamos la cámara (V) gluLookAt(cameraPos[0], cameraPos[1], cameraPos[2], lookat[0], lookat[1], lookat[2], up[0], up[1], up[2]); // Plano base /*glPushMatrix(); { glTranslatef(yellowSphereInit[0], yellowSphereInit[1] - 5.0, yellowSphereInit[2]); glRotatef(90.0, 0.0, 1.0, 0.0); glRotatef(90.0, 1.0, 0.0, 0.0); drawPlane(20.0, 20.0); } glPopMatrix();*/ // Dibujamos los objetos (M) // Numero /*glPushMatrix(); { glTranslatef(yellowSphereInit[0], yellowSphereInit[1], yellowSphereInit[2]); glRotatef(0, 0.0, 1.0, 0.0); glRotatef(0, 1.0, 0.0, 0.0); glTranslatef(0.0, 0.0, 3.0); drawNumber(); } glPopMatrix();*/ switch (scene) { case SCENE_PLANETS: { // Sun glPushMatrix(); { glTranslatef(yellowSphereInit[0], yellowSphereInit[1], yellowSphereInit[2]); glRotatef(rotSun[0], 1.0, 0.0, 0.0); glLightfv(GL_LIGHT0, GL_POSITION, yellowSphereInit); drawSphere(2.0f, 'y'); } glPopMatrix(); // Earth glPushMatrix(); { glTranslatef(yellowSphereInit[0], yellowSphereInit[1], yellowSphereInit[2]); glRotatef(translationEarth[0], 1.0, 0.0, 0.0); glRotatef(translationEarth[1], 0.0, 1.0, 0.0); glRotatef(translationEarth[2], 0.0, 0.0, 1.0); glTranslatef(blueSphereInit[0], 0.0, 0.0); glRotatef(rotEarth[0], 1.0, 0.0, 0.0); glRotatef(rotEarth[1], 0.0, 1.0, 0.0); drawSphere(0.5f, 'b'); } glPopMatrix(); // Moon glPushMatrix(); { glTranslatef(yellowSphereInit[0], yellowSphereInit[1], yellowSphereInit[2]); glRotatef(translationEarth[0], 1.0, 0.0, 0.0); glRotatef(translationEarth[1], 0.0, 1.0, 0.0); glRotatef(translationEarth[2], 0.0, 0.0, 1.0); glTranslatef(blueSphereInit[0], 0.0, 0.0); glRotatef(translationMoon[0], 1.0, 0.0, 0.0); glRotatef(translationMoon[1], 0.0, 1.0, 0.0); glRotatef(translationMoon[2], 0.0, 0.0, 1.0); glTranslatef(whiteSphereInit[0], 0.0, 0.0); glLightfv(GL_LIGHT1, GL_POSITION, whiteSphereInit); drawSphere(0.1f, 'w'); } glPopMatrix(); break; } case SCENE_PIEZA: { glPushMatrix(); { glTranslatef(translationBlue[0], translationBlue[1], translationBlue[2]); drawPieza(3.0, 1.0, 'b'); } glPopMatrix(); glPushMatrix(); { glTranslatef(translationBlue[0], translationBlue[1], translationBlue[2]); glTranslatef(translationOrange[0], translationOrange[1], translationOrange[2]); glRotatef(rotationOrange[2], 0.0, 0.0, 1.0); drawPieza(3.0, 1.0, 'o'); } glPopMatrix(); glPushMatrix(); { glTranslatef(translationBlue[0], translationBlue[1], translationBlue[2]); glTranslatef(translationOrange[0], translationOrange[1], translationOrange[2]); glRotatef(rotationOrange[2], 0.0, 0.0, 1.0); glTranslatef(translationGreen[0], translationGreen[1], translationGreen[2]); drawPieza(3.0, 1.0, 'g'); } glPopMatrix(); break; } case SCENE_ROOM: { drawRoom(); break; } default: break; } /*glPushMatrix(); { glTranslatef(initialDist, 0.0, -8.0); glRotatef(rotY, 0.0, 1.0, 0.0); drawPieza(3.0f, 1.0f); } glPopMatrix();*/ /*glPushMatrix(); { glRotatef(translationEarth[0], 1.0, 0.0, 0.0); glRotatef(translationEarth[1], 0.0, 1.0, 0.0); drawCube(); } glPopMatrix();*/ /*glPushMatrix(); { glTranslatef(initialDist, 0.0, -8.0); glRotatef(rotY, 0.0, 1.0, 0.0); drawSphere(1.0f, 'y'); } glPopMatrix();*/ // Intercambiamos los buffers glutSwapBuffers(); }
void Troll::gameLoop() { bool done = false; char menu[160+5]; int currentOption, numberOfOptions; int roomParam; int haveFlashlight; _moves = 0; _roomPicture = 1; _treasuresLeft = IDI_TRO_MAX_TREASURE; haveFlashlight = false; _currentRoom = 0; _isTrollAway = true; _soundOn = true; memset(_roomStates, 0, sizeof(_roomStates)); memset(_inventory, 0, sizeof(_inventory)); while (!done && !_vm->shouldQuit()) { *menu = 0; currentOption = 0; numberOfOptions = drawRoom(menu); if (getMenuSel(menu, ¤tOption, numberOfOptions)) { _moves++; } else { continue; } roomParam = _roomDescs[_roomPicture - 1].roomDescIndex[currentOption]; switch (_roomDescs[_roomPicture - 1].optionTypes[currentOption]) { case OT_FLASHLIGHT: if (!haveFlashlight) { printUserMessage(13); break; } // fall down case OT_GO: _currentRoom = roomParam; _roomPicture = _roomPicStartIdx[_currentRoom]; _roomPicture += _roomStates[_currentRoom]; if (_currentRoom < 6 || _treasuresLeft == 0) { _isTrollAway = true; } else { // make odd 1:3 _isTrollAway = (_vm->rnd(3) != 2); } break; case OT_GET: if (!_isTrollAway) { printUserMessage(34); } else { for (int i = 0; i < 4; i++) { playTune(1, 3); // delayMillis() } _roomStates[_currentRoom] = 1; _roomPicDeltas[_currentRoom] = 0; _roomPicture++; if (_roomConnects[roomParam - 1] != 0xff) { _roomStates[_roomConnects[roomParam - 1]] = 1; } if (roomParam == 1) haveFlashlight = true; _locMessagesIdx[_currentRoom] = IDO_TRO_LOCMESSAGES + (roomParam + 42) * 39; pickupTreasure(roomParam); } break; case OT_DO: if (roomParam != 16) { printUserMessage(roomParam); break; } done = true; break; default: break; } } }