OpenCV 및 OpenGL을 사용하여 원을 그리려하고 있습니다. 그리기가 텍스처에 있어야하기 때문에 이렇게해야합니다.OpenCV 및 OpenGL의 잘못된 그리기
현재 도면은 다음과 같습니다
이 이미지를 생성하고 다음과 같이이 그리는 코드 :
class Texture
{
void setup()
{
glEnable(GL_TEXTURE_2D);
glGenTextures(1, &uid);
glBindTexture(GL_TEXTURE_2D, uid);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S , GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glBindTexture(GL_TEXTURE_2D, 0);
glDisable(GL_TEXTURE_2D);
}
...
void setData(unsigned char * data, uint width, uint height, GLint internalformat, GLenum format)
{
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, uid);
glTexImage2D( GL_TEXTURE_2D,
0,
internalformat,
width,
height,
0,
format,
GL_UNSIGNED_BYTE,
data);
glBindTexture(GL_TEXTURE_2D, 0);
glDisable(GL_TEXTURE_2D);
}
...
void draw(float x, float y, float scale)
{
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, uid);
glBegin(GL_QUADS);
glTexCoord2i(0, 0); glVertex2i(x, y);
glTexCoord2i(0, 1); glVertex2i(x, y + height * scale);
glTexCoord2i(1, 1); glVertex2i(x + width * scale, y + height * scale);
glTexCoord2i(1, 0); glVertex2i(x + width * scale, y);
glEnd();
glBindTexture(GL_TEXTURE_2D, 0);
glDisable(GL_TEXTURE_2D);
}
...
};
class App
{
Texture tex;
...
void update()
{
const int w_mask_cv = 640;
const int h_mask_cv = 480;
cv::Mat mask_cv = cv::Mat::zeros(w_mask_cv, h_mask_cv, CV_8UC1);
cv::circle(mask_cv, cv::Point(w_mask_cv/2, h_mask_cv/2), 15, cv::Scalar(255));
tex.setData(mask_cv.data, w_mask_cv, h_mask_cv, GL_LUMINANCE, GL_LUMINANCE);
}
void draw()
{
tex.draw(0, 0, 1);
}
...
};
당신이 원이 있어야하는데 볼 수 있듯이 중간에 그리고 반복되지 않지만, 나는 그것이 수평축상에서 반복되는 이유를 모른다.
제안 사항?
네, 저도 오래 전에 저와 함께있었습니다. :) –