Hỏi về hàm render trong OpenGL

Dạ em mới học OpenGL, có một đoạn code như này em thấy hơi khó hiểu @@ cái void render1 là của sách, khi chạy thì màu của cửa sổ đổi màu liên tục, em nghĩ là nhờ hai hàm sin và cos, nên em viết cái hàm render2, nhưng nó chỉ đổi màu 1 lần r im re luôn @@ cho em hỏi em sai ở đâu nhỉ

void render1(double currentTime)
{
const GLfloat color[] = { 
(float)sin(currentTime) * 0.5f + 0.5f,
(float)cos(currentTime) * 0.5f + 0.5f,0.0f, 1.0f 
};
glClearBufferfv(GL_COLOR, 0, color);
}

void render2(double currentTime)
{
	float x;
	float y;
	x = (float)currentTime +1;
	y = (float)currentTime ;
const GLfloat color[] = { 
x * 0.5f + 0.5f,
y * 0.5f + 0.5f,0.0f, 1.0f 
};
glClearBufferfv(GL_COLOR, 0, color);
}

@nguyenchiemminhvu

1 Like

Mã màu trong OpenGL giới hạn từ -1.0f đến 1.0f, người ta dùng hàm sin, cos để giới hạn mã màu trong đoạn này. Đồ thị sin cos dao động liên tục nên màu sẽ biến đổi theo thời gian.

Còn đồ thị của tập các điểm (x, y) trong hàm render2 là 1 đường thẳng.

x = 0 => y = -1
x = 1 => y = 0

Khi mà nó vượt giới hạn mã màu 1.0f rồi thì hình như mặc định là 1.0f luôn.

Mà sao không dùng hàm glClearColor và lại dùng glClearBuffer để mất công truyền thêm tham số là GL_COLOR vào nữa. Có một số người gặp lỗi crash với hàm glClearBuffer khi chạy với card AMD.
https://devtalk.nvidia.com/default/topic/549057/crash-calling-glclearbufferfv-/?offset=2

4 Likes

Dạ này code trong sách nên em không rõ :smiley: mà cho em hỏi, một vòng lặp trong OpenGL gồm những gì ạ? Em không thấy hàm render được gọi ở đâu mà nó vẫn chạy @@

Đây là phiên bản OpenGL mấy? Ví dụ OpenGL 2 dùng thư viện glu.h hay gl.h thì không có để render trong vòng lặp mà gọi hàm render 1 lần trong call back glutDisplayFunc.

2 Likes

Một vòng lặp của phần đồ họa gồm có:

  • Poll event.
  • Updating.
  • Rendering.
  • Swap Buffer (nếu có hổ trợ double buffer).
2 Likes

Dạ OpenGL 4.3 ạ :)…

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?