工具環(huán)境
- macOS Mojave
- Clion
配置過程
1. 下載glew/glfw
brew install glew
brew install glfw
2. 配置Clion的CMakeLists.txt
我的配置為:
cmake_minimum_required(VERSION 3.9)
project(test)
set(CMAKE_CXX_STANDARD 11)
# 添加頭文件
set(GLEW_H /usr/local/Cellar/glew/2.1.0/include/GL)
set(GLFW_H /usr/local/Cellar/glfw/3.2.1/include/GLFW)
include_directories(${GLEW_H} ${GLFW_H})
# 添加目標(biāo)鏈接
set(GLEW_LINK /usr/local/Cellar/glew/2.1.0/lib/libGLEW.2.1.dylib)
set(GLFW_LINK /usr/local/Cellar/glfw/3.2.1/lib/libglfw.3.dylib)
link_libraries(${OPENGL} ${GLEW_LINK} ${GLFW_LINK})
# 執(zhí)行編譯命令
set(SOURCE_FILES main.cpp)
add_executable(test ${SOURCE_FILES})
if (APPLE)
target_link_libraries(test "-framework OpenGL")
target_link_libraries(test "-framework GLUT")
endif()
注意呐矾,其中的test是我的項(xiàng)目名,你需要改成自己的磷籍。
在配置完成后,我們加載cmake之后鹰晨,可以看到在External Libraties/Header Search Paths
目錄下有了GL
和GLFW
兩個(gè)新目錄抛虏。
項(xiàng)目結(jié)構(gòu)
3. 測(cè)試
測(cè)試代碼為
#include <iostream>
#include <glew.h>
#include <glfw3.h>
using namespace std;
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode)
{
//如果按下ESC,把windowShouldClose設(shè)置為True殃恒,外面的循環(huán)會(huì)關(guān)閉應(yīng)用
if(key==GLFW_KEY_ESCAPE && action == GLFW_PRESS)
glfwSetWindowShouldClose(window, GL_TRUE);
std::cout<<"ESC"<<mode;
}
int main()
{
if(!glfwInit())
return -1;
//創(chuàng)建窗口以及上下文
GLFWwindow* window = glfwCreateWindow(640, 480, "hello world", NULL, NULL);
if(!window)
{
//創(chuàng)建失敗會(huì)返回NULL
glfwTerminate();
}
glfwMakeContextCurrent(window);
glfwSetKeyCallback(window, key_callback); //注冊(cè)回調(diào)函數(shù)
while(!glfwWindowShouldClose(window))
{
glfwPollEvents();
glClearColor(0.2, 0.3, 0.3, 1);
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLES);
glColor3f(1, 0, 0); //Red
glVertex3f(0, 1, 1);
glColor3f(0, 1, 0); //Green
glVertex3f(-1, -1, 0);
glColor3f(0, 0, 1); //Blue
glVertex3f(1, -1, 0);
//結(jié)束一個(gè)畫圖步驟
glEnd();
glBegin(GL_POLYGON);
//再畫個(gè)梯形植旧,需要注意筆順
glColor3f(0.5, 0.5, 0.5); //Grey
glVertex2d(0.5, 0.5);
glVertex2d(1, 1);
glVertex2d(1, 0);
glVertex2d(0.5, 0);
glEnd();
/******交換緩沖區(qū),更新window上的內(nèi)容******/
glfwSwapBuffers(window);
}
glfwTerminate();
return 0;
}
結(jié)果為:
測(cè)試結(jié)果