系列三:OPENGL我来了
完成系列二后,心里相当激动,如果能看到精美的游戏动画多好......
这不是做梦,有梦想就能实现,但是我们还是一步一步来,先来看一下显示普通的图形
注:在此版本里,用了最容易的老式OPENGL,后面接下来用的是新式的moden opengl
MainGame.h
#pragma once #include <SDL/SDL.h> #include <GL/glew.h> enum class GameState{PLAY, EXIT}; class MainGame { public: MainGame(); ~MainGame(); void run(); private: void initSystems(); void gameLoop(); void processInput(); void drawGame(); SDL_Window* m_pWindow; int m_nScreenWidth; int m_nScreenHeight; GameState m_gameState; };
MainGame.cpp
#include "MainGame.h" #include <iostream> #include <string> void faterError(const std::string& errorString) { std::cout << errorString << std::endl; std::cout << "Enter any key to quit..."; std::cin.get(); SDL_Quit(); } MainGame::MainGame() :m_pWindow(nullptr), m_nScreenWidth(1024), m_nScreenHeight(768), m_gameState(GameState::PLAY) { } MainGame::~MainGame() { } void MainGame::run() { initSystems(); gameLoop(); } void MainGame::initSystems() { //Initialize SDL SDL_Init(SDL_INIT_EVERYTHING); m_pWindow = SDL_CreateWindow("GraphicToturial", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, m_nScreenWidth, m_nScreenHeight, SDL_WINDOW_OPENGL); if (nullptr == m_pWindow) { faterError("SDL Window could not be created!"); } SDL_GLContext glContext = SDL_GL_CreateContext(m_pWindow); if (nullptr == glContext) { faterError("SDL_GL context could not be created!"); } GLenum result = glewInit(); if (GLEW_OK != result) { faterError("Could not initialize glew!"); } SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); glClearColor(0, 0, 1, 1); } void MainGame::gameLoop() { while (m_gameState != GameState::EXIT) { processInput(); drawGame(); } } void MainGame::processInput() { SDL_Event evnt; while (SDL_PollEvent(&evnt)) { switch (evnt.type) { case SDL_QUIT: m_gameState = GameState::EXIT; break; case SDL_MOUSEMOTION: std::cout << evnt.motion.x << " " << evnt.motion.y << std::endl; break; } } } void MainGame::drawGame() { glClearDepth(1.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnableClientState(GL_COLOR_ARRAY); glColor3f(1.0f, 0.0f, 0.0f); glBegin(GL_TRIANGLES); glVertex2f(0.0f, 0.0f); glVertex2f(0.0f, 500.0f); glVertex2f(500.f, 500.0f); glEnd(); SDL_GL_SwapWindow(m_pWindow); }
相关推荐
夕加加 2020-07-20
shsshs 2020-06-13
夕加加 2020-06-13
图形学与可视化 2020-06-11
shsshs 2020-05-05
alexazh 2020-05-03
夕加加 2020-04-23
sxaudq0 2020-04-14
qiangbizhi 2020-04-09
alexazh 2020-03-06
sxaudq0 2020-02-23
夕加加 2020-02-15
sxaudq0 2020-01-18
夕加加 2020-01-06
shsshs 2019-12-27
shsshs 2019-12-05
dayenglish 2013-07-12
sxaudq0 2019-11-12