30/09/2018, 21:29

[OpenGL] Cho em hỏi về hàm render

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

... viết 23:33 ngày 30/09/2018

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

Nguyễn Hoàng Trung viết 23:41 ngày 30/09/2018

Dạ này code trong sách nên em không rõ 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 @@

... viết 23:34 ngày 30/09/2018

Đâ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.

... viết 23:36 ngày 30/09/2018

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).
Nguyễn Hoàng Trung viết 23:30 ngày 30/09/2018

Dạ OpenGL 4.3 ạ :)…

Bài liên quan
0