public QuadtreeChunk(Map<NodeComponentType, NodeComponent> components, QuadtreeCache quadtreeCache, Transform worldTransform, Vec2f location, int lod, Vec2f index){ addComponent(NodeComponentType.CONFIGURATION, components.get(NodeComponentType.CONFIGURATION)); terrainProperties = getComponent(NodeComponentType.CONFIGURATION); this.quadtreeCache = quadtreeCache; this.isleaf = true; this.index = index; this.lod = lod; this.location = location; this.gap = 1f/(terrainProperties.getRootChunkCount() * (float)(Math.pow(2, lod))); Vec3f localScaling = new Vec3f(gap,0,gap); Vec3f localTranslation = new Vec3f(location.getX(),0,location.getY()); getLocalTransform().setScaling(localScaling); getLocalTransform().setTranslation(localTranslation); setWorldTransform(worldTransform); computeWorldPos(); }
public void beginRenderPassCmd(long renderPass, long frameBuffer, int width, int height, int colorAttachmentCount, int depthAttachment, int contentsFlag){ VkClearValue.Buffer clearValues = VkClearValue.calloc( colorAttachmentCount + depthAttachment); for (int i=0; i<colorAttachmentCount; i++){ clearValues.put(VkUtil.getClearValueColor(new Vec3f(0,0,0))); } if (depthAttachment == 1){ clearValues.put(VkUtil.getClearValueDepth()); } clearValues.flip(); beginRenderPassCmd(renderPass, frameBuffer, width, height, contentsFlag, clearValues); clearValues.free(); }
public void computeWorldPos(){ Vec2f loc = location.add(gap/2f).mul(config.getScaleXZ()).sub(config.getScaleXZ()/2f); float height = getTerrainHeight(loc.getX(), loc.getY()); this.worldPos = new Vec3f(loc.getX(),height,loc.getY()); }
public Rock01ClusterGroup(){ List<Model<GLTexture>> models = GLAssimpModelLoader.loadModel("oreonworlds/assets/rocks/Rock_01","rock01.obj"); List<Renderable> objects = new ArrayList<>(); for (Model<GLTexture> model : models){ GLMeshVBO meshBuffer = new GLMeshVBO(); model.getMesh().setTangentSpace(true); Util.generateTangentsBitangents(model.getMesh()); model.getMesh().setInstanced(true); meshBuffer.addData(model.getMesh()); GLRenderInfo renderInfo = new GLRenderInfo(RockHighPolyShader.getInstance(), new DefaultRenderParams(), meshBuffer); GLRenderInfo shadowRenderInfo = new GLRenderInfo(RockShadowShader.getInstance(), new DefaultRenderParams(), meshBuffer); Renderable object = new Renderable(); object.addComponent(NodeComponentType.MAIN_RENDERINFO, renderInfo); object.addComponent(NodeComponentType.SHADOW_RENDERINFO, shadowRenderInfo); object.addComponent(NodeComponentType.MATERIAL0, model.getMaterial()); objects.add(object); } addChild(new Rock01Cluster(8,new Vec3f(-698,0,772),objects)); }
private static Material<GLTexture> processMaterial(AIMaterial aiMaterial, String texturesDir) { AIString path = AIString.calloc(); Assimp.aiGetMaterialTexture(aiMaterial, Assimp.aiTextureType_DIFFUSE, 0, path, (IntBuffer) null, null, null, null, null, null); String textPath = path.dataString(); GLTexture diffuseTexture = null; if (textPath != null && textPath.length() > 0) { diffuseTexture = new Texture2DTrilinearFilter(texturesDir + "/" + textPath); } AIColor4D color = AIColor4D.create(); Vec3f diffuseColor = null; int result = Assimp.aiGetMaterialColor(aiMaterial, Assimp.AI_MATKEY_COLOR_AMBIENT, Assimp.aiTextureType_NONE, 0, color); if (result == 0) { diffuseColor = new Vec3f(color.r(), color.g(), color.b()); } Material<GLTexture> material = new Material<GLTexture>(); material.setDiffusemap(diffuseTexture); material.setColor(diffuseColor); return material; }
public Rock02ClusterGroup(){ List<Model<GLTexture>> models = GLAssimpModelLoader.loadModel("oreonworlds/assets/rocks/Rock_02","rock02.obj"); List<Renderable> objects = new ArrayList<>(); for (Model<GLTexture> model : models){ GLMeshVBO meshBuffer = new GLMeshVBO(); model.getMesh().setTangentSpace(true); Util.generateTangentsBitangents(model.getMesh()); model.getMesh().setInstanced(true); meshBuffer.addData(model.getMesh()); GLRenderInfo renderInfo = new GLRenderInfo(RockHighPolyShader.getInstance(), new DefaultRenderParams(), meshBuffer); GLRenderInfo shadowRenderInfo = new GLRenderInfo(RockShadowShader.getInstance(), new DefaultRenderParams(), meshBuffer); Renderable object = new Renderable(); object.addComponent(NodeComponentType.MAIN_RENDERINFO, renderInfo); object.addComponent(NodeComponentType.SHADOW_RENDERINFO, shadowRenderInfo); object.addComponent(NodeComponentType.MATERIAL0, model.getMaterial()); objects.add(object); } addChild(new Rock02Cluster(10,new Vec3f(954,0,-30),objects)); }
public void getTerrainPosition(){ Vec3f pos = new Vec3f(0,0,0); DoubleBuffer xPos = BufferUtils.createDoubleBuffer(1); DoubleBuffer yPos = BufferUtils.createDoubleBuffer(1); screenPos.getY()/BaseContext.getWindow().getHeight()); Vec3f ndc = new Vec3f(w.getX() * 2 - 1, w.getY() * 2 - 1, depth); float cw = BaseContext.getCamera().getProjectionMatrix().get(3,2) / (ndc.getZ() - BaseContext.getCamera().getProjectionMatrix().get(2,2)); Vec3f clip = ndc.mul(cw);
public Sun(){ getWorldTransform().setLocalTranslation(GLDirectionalLight.getInstance().getDirection().mul(-2600)); Vec3f origin = new Vec3f(0,0,0); Vec3f[] array = new Vec3f[1]; array[0] = origin; GLPointVBO3D buffer = new GLPointVBO3D(); buffer.addData(array); Material<GLTexture> material1 = new Material<GLTexture>(); material1.setDiffusemap(new Texture2DTrilinearFilter("textures/sun/sun.png")); Material<GLTexture> material2 = new Material<GLTexture>(); material2.setDiffusemap(new Texture2DTrilinearFilter("textures/sun/sun_small1.png")); GLRenderInfo renderInfo = new GLRenderInfo(SunShader.getInstance(), new AlphaBlendingSrcAlpha(), buffer); addComponent(NodeComponentType.MAIN_RENDERINFO, renderInfo); addComponent(NodeComponentType.MATERIAL0, material1); addComponent(NodeComponentType.MATERIAL1, material2); Light light = new Light(); light.setOcclusionQuery(new GLOcclusionQuery()); addComponent(NodeComponentType.LIGHT, light); LightHandler.getLights().add(light); }