mirror of
https://github.com/OpenSpace/OpenSpace.git
synced 2026-02-26 14:58:51 -06:00
Fix CMake and add MultiLevelTile
This commit is contained in:
@@ -98,7 +98,7 @@ source_group("Source Files" FILES ${SOURCE_FILES})
|
||||
set(SHADER_FILES
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/shaders/blending.hglsl
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/shaders/ellipsoid.hglsl
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/shaders/texturetile.hglsl
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/shaders/tile.hglsl
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/shaders/texturetilemapping.hglsl
|
||||
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/shaders/globalchunkedlodpatch_vs.glsl
|
||||
|
||||
@@ -70,7 +70,7 @@ Fragment getFragment() {
|
||||
//LevelWeights levelWeights = getLevelWeights(levelInterpolationParameter);
|
||||
|
||||
#if USE_COLORTEXTURE
|
||||
|
||||
|
||||
frag.color = calculateColor(
|
||||
fs_uv,
|
||||
levelWeights,//levelInterpolationParameter,
|
||||
|
||||
@@ -64,8 +64,6 @@ Fragment getFragment() {
|
||||
|
||||
frag.color = vec4(1,1,1,1);
|
||||
|
||||
//LevelWeights levelWeights = getLevelWeights(levelInterpolationParameter);
|
||||
|
||||
#if USE_COLORTEXTURE
|
||||
|
||||
frag.color = calculateColor(
|
||||
|
||||
@@ -25,16 +25,45 @@
|
||||
#ifndef TEXTURETILE_HGLSL
|
||||
#define TEXTURETILE_HGLSL
|
||||
|
||||
vec4 patchBorderOverlay(vec2 uv, vec3 borderColor, float borderSize) {
|
||||
vec2 uvOffset = uv - vec2(0.5);
|
||||
float thres = 0.5 - borderSize/2;
|
||||
bool isBorder = abs(uvOffset.x) > thres || abs(uvOffset.y) > thres;
|
||||
vec3 color = isBorder ? borderColor : vec3(0);
|
||||
return vec4(color, 0);
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
// Tile Depth Transform //
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
|
||||
struct TileDepthTransform {
|
||||
float depthScale;
|
||||
float depthOffset;
|
||||
};
|
||||
|
||||
float getTransformedTexVal(const TileDepthTransform transform, const float val){
|
||||
return transform.depthOffset + transform.depthScale * val;
|
||||
}
|
||||
|
||||
vec4 getTransformedTexVal(const TileDepthTransform transform, const vec4 val){
|
||||
return transform.depthOffset + transform.depthScale * val;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
// Tile UV Transform //
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
|
||||
struct TileUvTransform {
|
||||
vec2 uvOffset;
|
||||
vec2 uvScale;
|
||||
};
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
// Tile //
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
struct Tile {
|
||||
sampler2D textureSampler;
|
||||
|
||||
@@ -42,6 +71,24 @@ struct Tile {
|
||||
TileUvTransform uvTransform;
|
||||
};
|
||||
|
||||
|
||||
vec4 getTexVal(const Tile tile, const vec2 tileUV){
|
||||
vec2 samplePos = tile.uvTransform.uvOffset + tile.uvTransform.uvScale * tileUV;
|
||||
vec4 texVal = texture(tile.textureSampler, samplePos);
|
||||
return texVal;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
// Multi Level Tile //
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
struct MultiLevelTile {
|
||||
Tile tile0;
|
||||
Tile tile1;
|
||||
Tile tile2;
|
||||
};
|
||||
|
||||
struct LevelWeights {
|
||||
float w1;
|
||||
float w2;
|
||||
@@ -65,26 +112,12 @@ LevelWeights getDefaultLevelWeights(){
|
||||
}
|
||||
|
||||
|
||||
vec4 patchBorderOverlay(vec2 uv, vec3 borderColor, float borderSize) {
|
||||
vec2 uvOffset = uv - vec2(0.5);
|
||||
float thres = 0.5 - borderSize/2;
|
||||
bool isBorder = abs(uvOffset.x) > thres || abs(uvOffset.y) > thres;
|
||||
vec3 color = isBorder ? borderColor : vec3(0);
|
||||
return vec4(color, 0);
|
||||
vec4 getTexVal(const MultiLevelTile multiLevelTile, const LevelWeights w, const vec2 uv){
|
||||
return w.w1 * getTexVal(multiLevelTile.tile0, uv) +
|
||||
w.w2 * getTexVal(multiLevelTile.tile1, uv) +
|
||||
w.w3 * getTexVal(multiLevelTile.tile2, uv);
|
||||
}
|
||||
|
||||
vec4 getTexVal(const Tile tile, const vec2 tileUV){
|
||||
vec2 samplePos = tile.uvTransform.uvOffset + tile.uvTransform.uvScale * tileUV;
|
||||
vec4 texVal = texture(tile.textureSampler, samplePos);
|
||||
return texVal;
|
||||
}
|
||||
|
||||
vec4 getTransformedTexVal(const TileDepthTransform transform, const vec4 val){
|
||||
return transform.depthOffset + transform.depthScale * val;
|
||||
}
|
||||
|
||||
float getTransformedTexVal(const TileDepthTransform transform, const float val){
|
||||
return transform.depthOffset + transform.depthScale * val;
|
||||
}
|
||||
|
||||
#endif // TEXTURETILE_HGLSL
|
||||
Reference in New Issue
Block a user