当前位置:网站首页>Chapitre 2: dessiner une fenêtre

Chapitre 2: dessiner une fenêtre

2022-06-24 07:49:00 Code Knight

Table des matières

        Un.、InstanciationGLFWFenêtre

        1、GLFWInitialisation

        2、VoirGLFWInformations sur la version

        3、Créer un objet de fenêtre 

2.、GLAD

        1、InitialisationGLAD

        2、Viewport

        3、Rendre 

        4、Libérer des ressources

        Trois、Code source expérimental

        1、Afficher la fenêtre

        2、Modifier la couleur de fond


Un.、InstanciationGLFWFenêtre

1、GLFWInitialisation

#include <glad/glad.h> 
#include <GLFW/glfw3.h>

#include <iostream>

int main() {

	glfwInit();//InitialisationGLFW
	glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);// Définir le numéro de version principal 
	glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);// Définir le numéro de version secondaire 
	glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);// Définir le mode de base 
	//glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);//UtiliserMAC Système plus ce code 

	return 0;
}

Si l'erreur suivante se produit dans le code ci - dessus , Veuillez consulter le lien solutions :(3Message (s)) Résoudre les erreurs: LNK2019 Symbole externe non résolu_Le blog de code Knight-CSDNBlogs

 2、VoirGLFWInformations sur la version

void getVersion() {
	int Major, Minor, Rev;
	glfwGetVersion(&Major, &Minor, &Rev);
	printf("GLFW %d.%d.%d initialized\n", Major, Minor, Rev);
}

Appelez cette fonction pour afficher les informations de version

3、Créer un objet de fenêtre 

void createWindow() {
	GLFWwindow* window = glfwCreateWindow(800, 600, "window", NULL, NULL);//Paramètres:Large,Élevé,Nom
	if (window == NULL) {//La création a échoué
		std::cout << "Failed to create GLFW window" << std::endl;
		glfwTerminate();
		return;
	}
	glfwMakeContextCurrent(window);
}

 

2.、GLAD

1、InitialisationGLAD

gladEst utilisé pour gérerOpenGLPointeur de fonction pour,Donc, on appelle n'importe quelOpenGL Nous avons tous besoin d'initialiser la fonction avant de GLAD

	if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
	{
		std::cout << "Failed to initialize GLAD" << std::endl;
		return -1;
	}

2、Viewport

Avant de commencer le rendu, Nous devons d'abord mettre en place OpenGL Taille de la fenêtre de rendu ,C'est le viewport(ViewPort).Le but est de faireOpenGL Connaître la taille et les coordonnées de la fenêtre .On peut appelerglViewport La fonction définit la dimension de la fenêtre (Dimension):

glViewport(0, 0, 800, 600);//Paramètres: Les deux premières sont les coordonnées du coin inférieur gauche de la fenêtre , Les deux derniers sont la largeur et la hauteur de la fenêtre de rendu (Pixels)

Attention!:

Fonction de rappel:

void framebuffer_size_callback(GLFWwindow* window, int width, int height);

 

void framebuffer_size_callback(GLFWwindow* window, int width, int height) {
	glViewport(0, 0, width, height);
}

 

glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);

 

3、Rendre 

Pour que nos fenêtres puissent être rendues en continu et recevoir l'entrée de l'utilisateur , Nous allons ajouter un paragraphe au programme whileCycle, Aussi appelé boucle de rendu (Render Loop), Ça peut être fait avant qu'on GLFContinuer à fonctionner jusqu'à la sortie.

while (!glfwWindowShouldClose(window))
	{
		glfwSwapBuffers(window);
		glfwPollEvents();
	}

Description de la fonction:

 

 

4、Libérer des ressources

 

glfwTerminate();

 

Trois、Code source expérimental

1、Afficher la fenêtre

#include <glad/glad.h> 
#include <GLFW/glfw3.h>

#include <iostream>
#include<conio.h>

void getVersion() {
	int Major, Minor, Rev;
	glfwGetVersion(&Major, &Minor, &Rev);
	printf("GLFW %d.%d.%d initialized\n", Major, Minor, Rev);
}

GLFWwindow* createWindow() {
	GLFWwindow* window = glfwCreateWindow(800, 600, "window", NULL, NULL);//Paramètres:Large,Élevé,Nom
	if (window == NULL) {//La création a échoué
		std::cout << "Failed to create GLFW window" << std::endl;
		glfwTerminate();
		return window;
	}
	glfwMakeContextCurrent(window);
	//_getch();
	return window;
}

//Fonction de rappel
void framebuffer_size_callback(GLFWwindow* window, int width, int height) {
	glViewport(0, 0, width, height);
}

int main() {

	glfwInit();//InitialisationGLFW
	glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);// Définir le numéro de version principal 
	glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);// Définir le numéro de version secondaire 
	glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);// Définir le mode de base 
	//glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);//UtiliserMAC Système plus ce code 
	
	getVersion();
	
	//createWindow();
	
	GLFWwindow* window = createWindow();

	if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
	{
		std::cout << "Failed to initialize GLAD" << std::endl;
		return -1;
	}

	//glViewport(0, 0, 800, 600);//Paramètres: Les deux premières sont les coordonnées du coin inférieur gauche de la fenêtre , Les deux derniers sont la largeur et la hauteur de la fenêtre de rendu (Pixels)
	framebuffer_size_callback(window, 800, 600);
	glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);

	while (!glfwWindowShouldClose(window))
	{
		glfwSwapBuffers(window);
		glfwPollEvents();
	}
	glfwTerminate();
	return 0;
}

 Résultats obtenus:

 

2、Modifier la couleur de fond

Structure du Code d'instruction de rendu :

//Boucle de rendu
	while (!glfwWindowShouldClose(window))
	{
		//Entrée
		processInput(window);

		//Instructions de rendu
		//……

		// Détecter et invoquer l'événement ,Swap buffer
		glfwPollEvents();
		glfwSwapBuffers(window);
	}

 

 

#include <glad/glad.h> 
#include <GLFW/glfw3.h>

#include <iostream>
#include<conio.h>

void getVersion() {
	int Major, Minor, Rev;
	glfwGetVersion(&Major, &Minor, &Rev);
	printf("GLFW %d.%d.%d initialized\n", Major, Minor, Rev);
}

GLFWwindow* createWindow() {
	GLFWwindow* window = glfwCreateWindow(800, 600, "window", NULL, NULL);//Paramètres:Large,Élevé,Nom
	if (window == NULL) {//La création a échoué
		std::cout << "Failed to create GLFW window" << std::endl;
		glfwTerminate();
		return window;
	}
	glfwMakeContextCurrent(window);
	//_getch();
	return window;
}

//Fonction de rappel
void framebuffer_size_callback(GLFWwindow* window, int width, int height) {
	glViewport(0, 0, width, height);
}

int main() {

	glfwInit();//InitialisationGLFW
	glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);// Définir le numéro de version principal 
	glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);// Définir le numéro de version secondaire 
	glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);// Définir le mode de base 
	//glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);//UtiliserMAC Système plus ce code 
	
	getVersion();
	
	//createWindow();
	
	GLFWwindow* window = createWindow();

	if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
	{
		std::cout << "Failed to initialize GLAD" << std::endl;
		return -1;
	}

	//glViewport(0, 0, 800, 600);//Paramètres: Les deux premières sont les coordonnées du coin inférieur gauche de la fenêtre , Les deux derniers sont la largeur et la hauteur de la fenêtre de rendu (Pixels)
	framebuffer_size_callback(window, 800, 600);
	glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);

	//Boucle de rendu
	while (!glfwWindowShouldClose(window))
	{
		//Entrée
		//processInput(window);
		//Instructions de rendu
		glClearColor(0.0f, 0.34f, 0.57f, 1.0f);
		glClear(GL_COLOR_BUFFER_BIT);

		// Détecter et invoquer l'événement ,Swap buffer
		glfwPollEvents();
		glfwSwapBuffers(window);
	}
	glfwTerminate();
	return 0;
}

 

 

原网站

版权声明
本文为[Code Knight]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/175/202206240351284007.html