[수정]안드로이드 오픈지엘 질문드립니다.

lalupo20의 이미지

일단 터치 처리에 관련된 부분인데,

각 객체마다 원래 화면에 보여줄 색상 말고 다른 색상값을 준비해둡니다.

터치가 들어왔을 시에 이 다른 색상값을 객체에 입혀주고 glReadPixels() 함수로 읽어들여서

들어온 픽셀값이 객체의 '다른 색상값'과 일치하면 해당 객체가 터치된 것으로 판단하는 형식입니다.

일단 glReadPixels 함수 사용부분은 다음과 같습니다.

static void engine_draw_frame(struct engine* engine) {
	if (engine->display == NULL) {
		// 디스플레이가 없습니다.
		return;
	}
	glClear(GL_COLOR_BUFFER_BIT);
 
	renderModule->setupViewPort(engine->width, engine->height);
 
 
// 화면을 색상으로 채웁니다.
	glClearColor(((float)engine->state.x[0]) / engine->width, engine->state.angle,
		((float)engine->state.y[0]) / engine->height, 1);
 
	renderModule->render();
 
	if (screenTouched) {
		renderModule->setFakeMode(true);
		renderModule->render();
 
		int x = engine->state.x[pointerIndex];
		int y = screenManager->scrHeight - engine->state.y[pointerIndex];
 
		glReadPixels(x, y,
			1, 1, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
 
		renderModule->setFakeMode(false);
		renderModule->render();
		screenTouched = false;
	}
 
	glClear(GL_DEPTH_BUFFER_BIT);
	eglSwapBuffers(engine->display, engine->surface);
}

그다음 render 함수는

void RenderModule::render() {	
	View* view = viewList.at(0);
 
	view->render();
 
	if (!fakeMode) {
		glManager->object()->drawAll();
	}
	else {
		glManager->object()->fakeDrawAll();
	}
}

위와 같고

터치를 한 후 손가락을 기기에서 땔때 작동하는 함수는 다음과 같습니다.

void MainView::touchUp() {
	if (album != nullptr && album->checkTouch(pixels)) {
		if (album->isAttached()) {
			album->detach();
		}
		else {
			album->attach();
		}
	}
	if (left != nullptr && left->checkTouch(pixels)) {
 
		if (!album->isAttached()) album->attach();
		int width, height;
 
		MusicFile* musicFile = MusicBox::getInstance()->container()->getMusic(++musicIndex);
 
		if (musicFile->pathStr.size() != 0) {
			MusicBox::getInstance()->container()->getAlbumArt(musicFile->pathStr.c_str());
 
			unsigned char* buf = glManager->texture()->loadJPEGTextureFromSDcard("/sdcard/Android/data/com.RhythmPlanet/art.jpg", &width, &height);
			album->setTexture(buf, width, height, false);
		}
	}
	if (right != nullptr && right->checkTouch(pixels)) {
 
		if (!album->isAttached()) album->attach();
		int width, height;
 
		MusicFile* musicFile = MusicBox::getInstance()->container()->getMusic(--musicIndex);
 
		if (musicFile->pathStr.size() != 0) {
			MusicBox::getInstance()->container()->getAlbumArt(musicFile->pathStr.c_str());
 
			unsigned char* buf = glManager->texture()->loadJPEGTextureFromSDcard("/sdcard/Android/data/com.RhythmPlanet/art.jpg", &width, &height);
			album->setTexture(buf, width, height, false);
		}
	}
}

checkTouch 함수는 아래와 같습니다.

bool GLObject::checkTouch(GLubyte* pixels) {
	bool check = false;
	if (pixels[0] / 255.0f == fakeColors[0]) {
		check = true;
	}
 
	return check;
}

마지막으로 객체를 리스트에 삽입할때 작동하는 함수는 아래와 같습니다

void GLObjectManager::push_back(GLObject* obj) {
	lock_guard<std::mutex> lock(_mutex);
	obj->setIndex(numOfObject);
	objList.push_back(obj);
 
	GLfloat red = (obj->getIndex() * 1.0f);
	GLfloat fcolor[4] = { red / 255.0f, 1.0f, 1.0f, 1.0f };
 
	obj->setFakeColors(fcolor, (sizeof(fcolor) / sizeof(fcolor[0])));
	numOfObject++;
}

이제부터 제가 드리고 싶은 질문은 위의 touchUp() 함수부분인데

right 객체는 터치이벤트가 잘 작동하는 반면,

album 객체와 left 객체는 작동하지 않습니다.

checkTouch함수에서 터치가 된 것으로 판독되지 않습니다.

어느 부분이 문제인지 좀 봐주실 수 있을까요?

정정합니다. right 객체가 left 객체로 인식되어 처리됩니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.