Bản chất của việc quay là xóa đi cái hình cũ và vẽ lên một cái hình mới ở vị trí khác thôi.
Mình chỉ biết vậy thôi chứ làm như thế nào thì ko biết, he he
mình có bài tập ứng dụng ma trận vuông vẽ hình cánh quạt.Sau đó làm cho cánh quạt quay.ban nào có thể giúp mình làm cho nó quay được không zi.(Vẽ hình thì mình vẽ được rùi nhưng không biết gọi hàm để chạy được).giúp mình woi.
Bản chất của việc quay là xóa đi cái hình cũ và vẽ lên một cái hình mới ở vị trí khác thôi.
Mình chỉ biết vậy thôi chứ làm như thế nào thì ko biết, he he
Mình từ Caulacbovb qua)
Giã từ VB6 đến với VB.Net, C# và Java.![]()
hix.Ai chả biết như thế.Nghe bảo dùng hàm delay rui` cho time nữa là xong.nhưng không biết làm sao.các pro chỉ mình với
cho nó quay hả , bạn kiu là ma trận vuông đúng ko nào ? giả sử như hình của bạn là hình cánh quạt nằm dọc , bi giờ muốn cho nó quay chỉ cần viết thêm 1 cánh quạt nằm ngang nữa , sau đó in ra màn hình lần lượt từng cái thui . Nhớ delay giữa khoảng xuất hiện của 2 hàm show_ngang và show_doc . Cho vòng lặp mãi mãi ...
ttecak ?
hix.có thể cho mình một đoan code mẫu được không.Ví dụ như giờ mình có 2 hàm hinh la:void hinh1(int n)va void hinh2(int n).gio sử dụng delay lam sao.thank
Học openGL đi, làm cho nó đơn giản.
Demo :
C++ Code:
#include <cstdlib> #include <GL/glut.h> float _angle = 30.0f; float _cameraAngle = 0.0f; //Gọi khi user nhập key void handleKeypress(unsigned char key, int x, int y) { switch (key) { case 27: //phím ESC thì thoát. exit(0); } } //Khởi tạo đồ họa 3D void initRendering() { glEnable(GL_DEPTH_TEST); } //Chỉnh lại hình cửa số. void handleResize(int w, int h) { glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0, (double)w / (double)h, 1.0, 200.0); } //Draws the 3D scene void drawScene() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); //Chuyển quang cảng vẽ glLoadIdentity(); //Khởi động lại quanh cảnh vẽ //*Lật 1 thứ ngc chiều //*Common trick on OpenGL. glRotatef(-_cameraAngle, 0.0f, 1.0f, 0.0f); glTranslatef(0.0f, 0.0f, -5.0f); //Di chuyển tới 5 units //Lưu trạng thái chuẩn bị transform glPushMatrix(); //Di chuyển tới trung tâm của tam giác. glTranslatef(-1.0f, 1.0f, 0.0f); //Quay cái tam giác = giá trị của vector <1, 2, 3> glRotatef(_angle, 1.0f, 2.0f, 3.0f); glBegin(GL_TRIANGLES); //Triangle glVertex3f(0.5f, -0.5f, 0.0f); glVertex3f(0.0f, 0.5f, 0.0f); glVertex3f(-0.5f, -0.5f, 0.0f); glEnd(); glPopMatrix(); //Send hình ra màn hình glutSwapBuffers(); } void updateObject(int value) { _angle += 2.0f; //Kĩ thuật xoay hình rất thông dụng trong openGL if (_angle > 360) { _angle -= 360; } //Báo cho GLUT là hình đã thay đổi glutPostRedisplay(); //Báo cho GLUT là nó sẽ gọi updateObject trong 10 milisec glutTimerFunc(10, updateObject, 0); } int main(int lhs, char** rhs) { //Khởi tạo cho thư viện GLUT, mấy cái này //của openGL nó có, viết chặp rùi quen glutInit(&lhs, rhs); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(200, 200); //Tạo cửa sổ tên Move around. glutCreateWindow("Move around"); initRendering(); //Vẽ, nhấn ESC để kết thúc, cái xử lý thông thường của openGL glutDisplayFunc(drawScene); glutKeyboardFunc(handleKeypress); glutReshapeFunc(handleResize); //Làm cho đối tượng quay vòng. glutTimerFunc(25, updateObject, 0); glutMainLoop(); return 0; }
Đã được chỉnh sửa lần cuối bởi rox_rook : 13-03-2008 lúc 01:51 PM.
Nếu dùng trên Linux thì dùng makefile mà build nó
ThenCode:cd /dir/...
Makefile.Code:make
C++ Code:
CC = g++ CFLAGS = -Wall PROG = transform //file exe là đây SRCS = main.cpp //tên file cần dịch. ifeq ($(shell uname),Darwin) LIBS = -framework OpenGL -framework GLUT else LIBS = -lglut endif all: $(PROG) $(PROG): $(SRCS) $(CC) $(CFLAGS) -o $(PROG) $(SRCS) $(LIBS) clean: rm -f $(PROG)
ax, anh Rook cho bài giải cao siêu quá, đọc chả hiểu gì hết >.<
"what you don't use you don't pay for" (Bjarne Stroustrup).
OpenGL mà đơn giản à![]()
Mình từ Caulacbovb qua)
Giã từ VB6 đến với VB.Net, C# và Java.![]()
Theo anh nghĩ openGL không khó như em nghĩ. Anh đọc tổng quát nó có tới 250 hàm trong thư viện của nó, cái chúng ta làm là làm sao lấy ra xài cho hiệu quả thôi. Nếu em từng học hình học không gian về vector, dot produtc, cross product... thì anh nghĩ em đọc 1 hồi là hiểu.ax, anh Rook cho bài giải cao siêu quá, đọc chả hiểu gì hết >.<
-Thấy nó khó, rắc rối, phức tạp thường thì do tâm lý các bạn mới học nhìn vào tên hàm dài, nhiều, lạ là sợ tưởng nó chắc cực kì cao siêu.
-Em phải nghĩ thế này, nếu mà cao siêu quá thì có lẽ nó sẽ chẳng còn phổ biến nữa, vì khó quá thì chắc chỉ có vài người học được T_T.
Cái này thì khó nói, tùy mức độ sử dụng, nếu viết game thì có lẽ cũng hơi cực. Vì thực ra chỉ vẽ không dễ hơn xài chung với lập trình thông thường. Nếu viết openGL thường chỉ là project, do đó nó take time vậy thôi, chịu khó design pattern trước làm từng bước + 1 chút bền bì -> everything will be on your wayOpenGL mà đơn giản à!