When we control the event,we control your lives
 
IndexTrợ giúpTìm kiếmThành viênNhómĐăng kýĐăng Nhập
Tìm kiếm
 
 

Display results as :
 
Rechercher Advanced Search
Latest topics
» Tô màu theo vùng quét
Tue Aug 13, 2013 4:18 pm by minhlap

» authentischen Hermes Lindy Taschen
Wed Jan 23, 2013 11:15 am by cangliang

» Hermes Bag
Wed Jan 23, 2013 11:14 am by cangliang

» Hermes Evelyn pm
Wed Jan 23, 2013 11:13 am by cangliang

» Hermes Kelly bag billig
Mon Jan 21, 2013 8:57 am by cangliang

» Hermes Constance Bag
Mon Jan 21, 2013 8:56 am by cangliang

» Discout Hermes Belt
Mon Jan 21, 2013 8:55 am by cangliang

» Christian Louboutin Love Flats
Tue Jan 15, 2013 12:25 pm by cangliang

» Christian Louboutin Love Flats
Tue Jan 15, 2013 12:25 pm by cangliang

Navigation
 Portal
 Diễn Đàn
 Thành viên
 Lý lịch
 Trợ giúp
 Tìm kiếm
December 2016
MonTueWedThuFriSatSun
   1234
567891011
12131415161718
19202122232425
262728293031 
CalendarCalendar
Diễn Đàn
Affiliates
free forum


Share | 
 

 Lớp Graphics

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down 
Tác giảThông điệp
minhlapb
Thành viên bậc 2
Thành viên bậc 2


Tổng số bài gửi : 32
Points : 90
Reputation : 2
Join date : 22/07/2009

Bài gửiTiêu đề: Lớp Graphics   Wed Nov 04, 2009 4:35 pm

Có ai sửa dùm bài này cám ơn --- thầy cũng no way

bài mình làm là tạo một lớp Graphics de ve hinh trong OpenGL như chỗ hàm InitOpenGL nó không nhận ra các hàm sự kiện như myDraw trong glutDisplayFunc(myDraw);

file Graphics.h

#ifndef _GRAPHICS_H
#define _GRAPHICS_H

#include"glut.h"

struct colorentry
{
GLubyte Red;
GLubyte Blue;
GLubyte Green;
colorentry() {Red=Green=Blue=0; }
colorentry(GLbyte R,GLbyte G,GLbyte B)
{
Red=R;
Green=G;
Blue=B;
}
};
class Graphics
{
colorentry m_color;
void myInit();
void myDraw();
void OnSize(int width,int height);
void OnKeyDown(unsigned char key,int x, int y);
void OnMouse(int btn, int state, int x, int y);
void OnMotion(int x, int y);
void OnIdle();
public:
void InitOpenGL(int argc,char *argv[],char *s,int w=640,int h=480);
void PutPixel(int x,int y,colorentry c);
colorentry GetPixel(int x,int y);
void SetColor(colorentry c);;
void DrawLine_GL(int x1,int y1,int x2,int y2,colorentry c);
void DrawLineDDA(int x1,int y1,int x2,int y,colorentry c);
void DrawLineBresenham(int x1,int y1,int x2,int y2,colorentry c);
};

#endif



file Graphics.cpp

#include"Graphics.h"
#define Round(x) (int)(x+0.5)

void Graphics::PutPixel(int x,int y,colorentry c)
{
glColor3ub(c.Red,c.Green,c.Blue);
glBegin(GL_POINTS);
glVertex2f(x,y);
glEnd();
}
colorentry Graphics::GetPixel(int x,int y)
{
GLbyte color[3];
float Pos[4];
glRasterPos2d(x,y);
glGetFloatv(GL_CURRENT_RASTER_POSITION,Pos);
glReadPixels(Pos[0],Pos[1],1,1,GL_RGB,GL_UNSIGNED_BYTE,color);
return colorentry(color[0],color[1],color[2]);
}
void Graphics::SetColor(colorentry c)
{
glColor3ub(c.Red,c.Green,c.Blue);
}
void Graphics::DrawLine_GL(int x1,int y1,int x2,int y2,colorentry c)
{
glColor3ub(c.Red,c.Green,c.Blue);
glBegin(GL_LINES);
glVertex2f(x1,y1);
glVertex2f(x2,y2);
glEnd();
}
void Graphics::DrawLineDDA(int x1,int y1,int x2,int y2,colorentry c)
{
int x=x1;
float y=y2;
float m=(float)((y2-y1)/(x2-x1));
PutPixel(x,y1,c);
while(x<x2)
{
x++;
y+=m;
PutPixel(x,Round(y),c);
}
}
void Graphics::DrawLineBresenham(int x1,int y1,int x2,int y2,colorentry c)
{
int x=x1,y=y1;
int dx=x2-x1,dy=y2-y1;
int c1=(dy<<1);
int c2=((dy-dx)<<1);
int p=(dy<<1)-dx;
glBegin(GL_POINTS);

glVertex2i(x,y);
while(x<x2)
{
if(p<0)
p+=c1;
else
{
p+=c2;
y++;
}
++x;
glVertex2i(x,y);
}
glEnd();
}
void Graphics::InitOpenGL(int argc,char *argv[],char *s,int w,int h)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
glutInitWindowSize(w,h);
glutInitWindowPosition(100,100);
glutCreateWindow(s);
// thao tac su kien

myInit();
glutDisplayFunc(myDraw);///<---- không nhận ra hàm myDraw , cũng như // OnKeyDown, OnMouse. ...
glutReshapeFunc(OnSize);
glutKeyboardFunc(OnKeyDown);
glutMouseFunc(OnMouse);
glutMotionFunc(OnMotion);
glutIdleFunc(OnIdle);
glutPassiveMotionFunc(OnMotion);
glutMainLoop();

}
chưa đụng gi hàm main hết nó báo lỗi ở mấy dòng màu đỏ trên

Về Đầu Trang Go down
Xem lý lịch thành viên
symphonyenigmatic
Thành viên bậc 3
Thành viên bậc 3


Tổng số bài gửi : 61
Points : 104
Reputation : 6
Join date : 26/07/2009
Age : 28
Đến từ : http:://thienthancntt.tk

Bài gửiTiêu đề: Re: Lớp Graphics   Sat Nov 07, 2009 5:01 am

Báo lỗi chắc luôn.
Mình chỉ nói vd 1 hàm thôi, mấy thứ khác bạn tự liên tưởng nha.
glutDisplayFunc(myDraw). Đây là hàm mà thầy nói là mình viết code để cho ng ta sài. Tức là bạn viết code, nhưng bạn không sử dụng, mà là chuog trình nó sử dụng. hàm glutDisplayFunc là hàm do opengl định nghĩa, và cấu trúc hàm là: hàm này gọi tới 1 hàm, chứ không phải gọi tới 1 tham số. Vậy mih hỏi bạn nha, nó gọi hàm myDraw. Vậy hàm myDraw của bạn đâu?
Hiii..nói vậy thôi, lỗi rất đơn giản, thiếu hàm OnDraw. Nhưng mình nói hơi dài ở trên, vì có 1 điều chưa đúng theo logic, máy k báo, nhưng mà k hay.
Đó là mình nghĩ bạn hiểu sai ý của thầy rồi, khi đưa nguyên cả cái cục màu đỏ đỏ đó vào InitOpenGL. Thứ nhất là nó chưa tối ưu lắm. Vì có hàm thì sử dụng những cái trên, nhưng có khi thì sử dụng nhiều hơn, vậy làm như vậy là chưa dc.
Thứ 2, là không đúng tính chất Hướng Đối Tượng. Bạn chỉ bỏ phần khởi tạo vô thôi. Chứ mấy hàm đó ng ta định nghĩa rồi, vậy sao ng ta không viết luôn, mà cho phép ban viết hàm onDraw, vì ng ta muốn cho ng dùng tự định nghĩa ngay trong hàm main. Nếu bạn ghi ở đây, vậy khi dùng hàm main, thì phải vào đây định nghĩa lại. Nếu là ng dùng, họ có biết hàm CGraphics của bạn k?
Ngoài ra 1 số hàm khác nữa. Đã gọi là thư viện, tức là phải đúng trong mọi trường hơp, gọi là run.. Nên mình thấy bài của bạn hơi kì kì.. Bạn xem kĩ lại nhé! Thân!
Về Đầu Trang Go down
Xem lý lịch thành viên http://http:://thienthancntt.tk
minhlapb
Thành viên bậc 2
Thành viên bậc 2


Tổng số bài gửi : 32
Points : 90
Reputation : 2
Join date : 22/07/2009

Bài gửiTiêu đề: Re: Lớp Graphics   Sat Nov 07, 2009 12:35 pm

trả lởi lạc đề nhiều quá.... những cái mà ng ta không muốn biết mà bắt người ta phải đọc thì thật là ác quá....
sai thì nói là sai, sao phe phán nhiu quá, uh mình dở mình tệ lắm....

tôi có khai báo hàm myDraw đàng hoàn nge, không xem ki mà nói cái j

nói tóm lại class Graphics như vậy là không đúng phải không
thì không dúng, thì chỉ ra chổ sai là dc rồi
nói linh tinh

Về Đầu Trang Go down
Xem lý lịch thành viên
symphonyenigmatic
Thành viên bậc 3
Thành viên bậc 3


Tổng số bài gửi : 61
Points : 104
Reputation : 6
Join date : 26/07/2009
Age : 28
Đến từ : http:://thienthancntt.tk

Bài gửiTiêu đề: Re: Lớp Graphics   Sat Nov 07, 2009 2:36 pm

Mình không thấy hàm myDraw trong file Graphics.cpp của bạn. Nếu bạn viết trong hàm main thì nó báo lỗi là đương nhiên.
Nếu có hàm myDraw ở đây, thì bạn phải viết theo kiểu hướng dt thì nó mới hiểu.
void Graphics::myDraw(void)
{
//............
}
Cuối cùng: nên đưa myDraw và mấy cái hàm opengl ra file main. Thân!
Về Đầu Trang Go down
Xem lý lịch thành viên http://http:://thienthancntt.tk
symphonyenigmatic
Thành viên bậc 3
Thành viên bậc 3


Tổng số bài gửi : 61
Points : 104
Reputation : 6
Join date : 26/07/2009
Age : 28
Đến từ : http:://thienthancntt.tk

Bài gửiTiêu đề: Re: Lớp Graphics   Sat Nov 07, 2009 4:06 pm

Vẽ đường tròn bằng thuật toán MidPoint, thầy đưa vào hàm Get8Pixel
void CGraphics::Set8Pixel(int xc, int yc, int x, int y)
{
SetPixel(xc+x,yc+y);
SetPixel(xc+x,yc-y);
SetPixel(xc-x,yc+y);
SetPixel(xc-x,yc-y);
SetPixel(xc+y,yc+x);
SetPixel(xc+y,yc-x);
SetPixel(xc-y,yc+x);
SetPixel(xc-y,yc-x);
}

Vậy sao không phải là SetPixel (x, y)..hoặc là(xc, yc) và hàm chỉ đưa vào 2 tham số thôi? Mình không nói đến cách viết, mà là hỏi về ý tưởng, sao lại phải xc + rồi xc-.. Thực tế, mình viết 1 bài không dùng 2 tham số xc+x, xc-x, mà chỉ dùng x, và -x, nó vẫn vẽ dc theo thuật toán Midpoint. Bạn nào biết giải thích cho mình nghe với.
Về Đầu Trang Go down
Xem lý lịch thành viên http://http:://thienthancntt.tk
Sponsored content




Bài gửiTiêu đề: Re: Lớp Graphics   Today at 1:24 am

Về Đầu Trang Go down
 
Lớp Graphics
Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang 
Trang 1 trong tổng số 1 trang

Permissions in this forum:Bạn không có quyền trả lời bài viết
minhlap.allgoo.us :: Lập trình :: Lập Trình Hướng Đối Tượng,Đồ Họa OpenGL C, C++-
Chuyển đến