あかすくぱるふぇ

同人サークル「あかすくぱるふぇ」のブログです。

New ProjectでKotlin→JVMを選択
Project nameを適当につけてFinish
srcフォルダにktファイルを作成
下記サイトのFirstStepSwing.javaをコピペし、kotlinコードに変換

gradleでjogl-all-mainとgluegen-rt-mainをimplementation
init~dispose関数にoverrideキーワードを追加
dispose関数の中身を削除

〇Hello World
class Renderer : GLEventListener {
override fun init(drawable: GLAutoDrawable?) {}
override fun reshape(drawable: GLAutoDrawable?, x: Int, y:Int, width: Int, height: Int) {}
override fun display(drawable: GLAutoDrawable?) {}
override fun dispose(drawable: GLAutoDrawable?) {}
}

fun main() {
val frameSize = Dimension(300, 300)
val caps = GLCapabilities(GLProfile.get(GLProfile.GL2))
val frame = JFrame().apply {
size = frameSize
}
val panel = GLJPanel(caps).apply {
addGLEventListener(Renderer())
}
frame.contentPane.add(panel)
frame.isVisible = true
}

・ポリゴン描画
class Renderer : GLEventListener {
override fun init(drawable: GLAutoDrawable?) {
drawable?.let {
val gl = it.gl.gL2
gl.glClearColor(0.0f, 0.0f, 1.0f, 1.0f)
}
}
override fun reshape(drawable: GLAutoDrawable?, x: Int, y: Int, width: Int, height: Int) {}
override fun display(drawable: GLAutoDrawable?) {
drawable?.let {
val gl = it.gl.gL2
gl.glClear(GL2.GL_COLOR_BUFFER_BIT)
gl.glBegin(GL2.GL_POLYGON)
gl.glColor3f(1.0f, 0.0f, 0.0f)
gl.glVertex2f(-0.9f, -0.9f)
gl.glColor3f(0.0f, 1.0f, 0.0f)
gl.glVertex2f(0.9f, -0.9f)
gl.glColor3f(0.0f, 0.0f, 1.0f)
gl.glVertex2f(0.9f, 0.9f)
gl.glColor3f(1.0f, 1.0f, 0.0f)
gl.glVertex2f(-0.9f, 0.9f)
gl.glEnd()
}
}
override fun dispose(drawable: GLAutoDrawable?) {}
}

・テクスチャマッピング
class Renderer : GLEventListener {

private var texture : Texture? = null

override fun init(drawable: GLAutoDrawable?) {
drawable?.let {
val gl = it.gl.gL2
gl.glClearColor(0.0f, 0.0f, 1.0f, 1.0f)
texture = TextureIO.newTexture(File("yutaka.png"), false)
}
}
override fun reshape(drawable: GLAutoDrawable?, x: Int, y: Int, width: Int, height: Int) {}
override fun display(drawable: GLAutoDrawable?) {
drawable?.let {
val gl = it.gl.gL2
gl.glClear(GL2.GL_COLOR_BUFFER_BIT)
gl.glEnable(GL2.GL_TEXTURE_2D)
gl.glBegin(GL2.GL_QUADS);
gl.glTexCoord2f(0.0f, 0.0f)
gl.glVertex2f(-0.9f, -0.9f)
gl.glTexCoord2f(1.0f, 0.0f)
gl.glVertex2f(0.9f, -0.9f)
gl.glTexCoord2f(1.0f, 1.0f)
gl.glVertex2f(0.9f, 0.9f)
gl.glTexCoord2f(0.0f, 1.0f)
gl.glVertex2f(-0.9f, 0.9f)
gl.glEnd()
}
}
override fun dispose(drawable: GLAutoDrawable?) {}
}

・透視投影
import com.jogamp.opengl.*
import com.jogamp.opengl.awt.GLJPanel
import com.jogamp.opengl.glu.GLU
import java.awt.Dimension
import javax.swing.JFrame


class Renderer : GLEventListener {

private var glu : GLU? = null

var vertices = arrayOf(
floatArrayOf(0.0f, 0.0f, 0.0f),
floatArrayOf(1.0f, 0.0f, 0.0f),
floatArrayOf(1.0f, 1.0f, 0.0f),
floatArrayOf(0.0f, 1.0f, 0.0f),
floatArrayOf(0.0f, 0.0f, 1.0f),
floatArrayOf(1.0f, 0.0f, 1.0f),
floatArrayOf(1.0f, 1.0f, 1.0f),
floatArrayOf(0.0f, 1.0f, 1.0f)
)

var edges = arrayOf(
intArrayOf(0, 1),
intArrayOf(1, 2),
intArrayOf(2, 3),
intArrayOf(3, 0),
intArrayOf(4, 5),
intArrayOf(5, 6),
intArrayOf(6, 7),
intArrayOf(7, 4),
intArrayOf(0, 4),
intArrayOf(1, 5),
intArrayOf(2, 6),
intArrayOf(3, 7)
)

override fun init(drawable: GLAutoDrawable?) {
drawable?.let {
val gl = it.gl.gL2
gl.glClearColor(0.0f, 0.0f, 1.0f, 1.0f)
glu = GLU()
}
}
override fun reshape(drawable: GLAutoDrawable?, x: Int, y:Int, width: Int, height: Int) {
drawable?.let {
val gl = it.gl.gL2

gl.glMatrixMode(GL2.GL_PROJECTION)
gl.glLoadIdentity()
glu!!.gluPerspective(30.0, width.toDouble() / height, 1.0, 100.0)
gl.glTranslatef(0.0f, 0.0f, -5.0f)

gl.glMatrixMode(GL2.GL_MODELVIEW)
gl.glLoadIdentity()
glu!!.gluLookAt(3.0f, 4.0f, 5.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f)
}

}
override fun display(drawable: GLAutoDrawable?) {
drawable?.let {
val gl = it.gl.gL2
gl.glClear(GL2.GL_COLOR_BUFFER_BIT)
gl.glBegin(GL2.GL_LINES)
for (edge in edges) {
gl.glVertex3fv(vertices[edge[0]], 0)
gl.glVertex3fv(vertices[edge[1]], 0)
}
gl.glEnd()
}
}
override fun dispose(drawable: GLAutoDrawable?) {}
}


fun main() {

val frameSize = Dimension(300, 300)

val caps = GLCapabilities(GLProfile.get(GLProfile.GL2))
val panel = GLJPanel(caps).apply {
addGLEventListener(Renderer())
}

val frame = JFrame().apply {
size = frameSize
contentPane.add(panel)
isVisible = true
}
}

import java.awt.*
import javax.swing.*

fun main() {
EventQueue.invokeLater {
val frame = JFrame()
frame.setSize(300, 200)
frame.defaultCloseOperation = JFrame.EXIT_ON_CLOSE
frame.isVisible = true

val button = JButton("button")
button.addActionListener { JOptionPane.showMessageDialog(null, "Hello!") }

frame.layout = FlowLayout()
frame.add(button)
}
}

import java.awt.*
import javax.swing.*

fun main() {
EventQueue.invokeLater { JButtonTest() }
}

class JButtonTest : JFrame() {
init {
setSize(300, 200)
defaultCloseOperation = EXIT_ON_CLOSE
isVisible = true

val button = JButton("button")
button.addActionListener { JOptionPane.showMessageDialog(null, "Hello!") }

layout = FlowLayout()
add(button)
}
}

Helen Dataset

・ダウンロード
以下のリンクから"a. All Images"と"c. Annotation"をダウンロード

・ファイル配置
annotationフォルダとimageフォルダを同階層に作る。
annotationフォルダはダウンロードしたものそのままでOK。
imageフォルダにはダウンロードした画像を突っ込む(フォルダ分けせず直下に画像ファイルが来るように)。

・データ確認
import cv2

with open('annotation/1.txt', 'r') as file:
img_file_name = file.readline().replace('\n', '')
img_file_name = 'images/' + img_file_name + '.jpg'
img = cv2.imread(img_file_name)

for line in file:
x, y = line.replace('\n', '').replace('\r', '').replace(' ', '').split(',')
cv2.drawMarker(img, (int(float(x)), int(float(y))), (21, 255, 12),
markerType=cv2.MARKER_CROSS, thickness=2)
height_before = img.shape[0]
width_before = img.shape[1]
height_after = 512
width_after = int(width_before * height_after / height_before)
img = cv2.resize(img, (width_after, height_after))

cv2.imshow('', img)
cv2.waitKey()


300W

・ダウンロード
以下のリンクからpart1-part4をダウンロードし、catした上で解凍

・データ確認
import cv2

with open('01_Indoor/indoor_001.pts', 'r') as file:

img = cv2.imread('01_Indoor/indoor_001.png')

for i in range(3):
file.readline()
for i in range(68):
x, y = file.readline().split(' ')
cv2.drawMarker(img, (int(float(x)), int(float(y))), (21, 255, 12),
markerType=cv2.MARKER_CROSS, thickness=1)

cv2.imshow('', img)
cv2.waitKey()



↑このページのトップヘ