在我的mousefunc中,我調用了一個函數bspline。它的工作原理是這樣的: 用鼠標可以放置控制點,並根據這些點繪製Bspline。因此,如果繪製了三個點,則會顯示這些點之間的曲線。通過添加另一點,舊曲線消失並出現新曲線。這個新的謊言現在介於四點之間。這工作得很好。但是:此Bspline曲線只顯示在一個視口中。此視口具有黑色邊框。當我的bspline被重繪時,這個邊界消失。這是因爲調用了glutPostredisplay。因爲在我的glutDisplayFunc中我調用glClear(GL_COLOR_BUFFER_BIT)。所以這是很自然的事情發生。如果我在我的displayfunc中刪除了glClear(GL_COLOR_BUFFER_BIT),邊框會保留,但舊曲線也會保留。即使我說邊界應該重繪,沒有任何反應。我不能想到替代方案。如果你能幫助我,將不勝感激......Bspline應該重繪,而不會刪除窗口的所有其他部分
0
A
回答
1
在OpenGL中,通常的做法是在整個場景的某些部分發生變化時重新渲染整個場景。在您的情況下,更改B樣條的控制點應觸發場景的重新顯示,而不是在鼠標點擊處理函數中執行繪圖操作。
OpenGL沒有幾何圖形持久性,它只是將原始圖像繪製到基於像素的幀緩衝區。因此你必須使用它。
爲了澄清,一些僞代碼:
BSpline *b_spline;
void on_mouseclick(int x, int y)
{
float x_, y_;
transform_screen_to_scene(x,y, &x_, &y_);
bspline_add_control_point(b_spline, x_, y_);
trigger_redisplay();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
setup_viewport_and_projection();
bspline_draw(b_spline);
swap_buffers();
}
相關問題
- 1. Delphi窗口在所有其他應用程序的頂部,而主窗口在
- 2. Qt窗口小部件似乎與其他窗口小部件重疊時,他們不應該
- 3. D3.js - 出口()部分不會刪除所有數據
- 4. 刪除所有其他列
- 5. C++重繪窗口的一部分
- 6. 如何在程序窗口中刪除它的一部分而不刪除它?
- 7. Perl Curses :: UI窗口不會繪製所有小部件
- 8. 如何刪除.txt文件的標題行,而不會干擾行的其餘部分在尊重所有MATLAB
- 9. 重複部分的程序,而其他部分保持不變
- 10. QGridLayout不會返回其所有子窗口小部件
- 11. 在JPanel的一部分中繪製而不重繪其餘部分
- 12. 來自SendMessage的消息應該會導致繪製其他窗口,但它不會
- 13. 在Vim中關閉分割窗口而不調整其他窗口的尺寸
- 14. 縮小父窗口,而不是其他窗口小部件增長
- 15. 最大化Emacs窗口而不會讓其他人消失
- 16. 從其他窗口關閉所有子窗口瀏覽器
- 17. 使tkinter窗口出現在所有其他窗口上
- 18. Java圖形 - 重繪圖像而不移除其他圖像
- 19. 我可以強制父窗口重繪而不會導致子窗口重繪嗎?
- 20. GetMessage(WM_CHAR)重寫?確保所有其他窗口掛鉤激活
- 21. 刪除與特定分支關聯的所有窗口
- 22. 如何刪除範圍內的所有其他重複Google Spreadsheets
- 23. 包含一個小部件,而不是排除所有其他小部件
- 24. 刪除的SplitContainer而不刪除其他控件
- 25. 的Android刪除其他應用程序的內部數據,而不根
- 26. WM_EX_TRANSPARENT不重繪子窗口
- 27. WPF窗口應該是有模式,以本地所有者窗口,但不
- 28. TabControl重繪通過頂部的窗口
- 29. 更新一個實體的模式而不刪除其他所有內容
- 30. SQL - 基於某些列,而不是其他刪除重複